『字节青训营-3rd』L15:微服务架构原理与治理实践
微服务架构介绍
系统架构演进历史
为什么系统架构需要演进?
互联网的爆炸性发展
硬件设施的快速发展
需求复杂性的多样化
开发人员的急剧增加
计算机理论及技术的发展
单体架构
All in one process
优势:
性能最高
冗余小
劣势:
debug 困难
模块相互影响
模块分工、开发流程
垂直应用架构
按照业务线垂直划分
优势:
业务独立开发维护
劣势:
不同业务存在冗余
每个业务还是单体
分布式架构
抽出业务无关的公共模块
优势:
业务无关的独立服务
劣势:
服务模块bug可导致全站瘫痪
调用关系复杂
不同服务冗余
SOA架构(Service Oriented Architecture)
面向服务
优势:
服务注册
劣势:
整个系统是中心化的
需要从上至下设计
重构困难
微服务架构
彻底的服务化
优势:
开发效率
业务独立设计
自下而上
故障隔离
劣势:
治理、运维难度
观测挑战
安全性
分布式系统
微服务架构概览
微服务架构核心要素
服务治理
服务注册
服务发现
负载均衡
扩缩容
流量治理
稳定性治理
…
可观察性
日志采集
日志分析
监控打点
监控大盘
异常报警
链路追踪
…
安全
身份验证
认证授权
访问令牌
审计
传输加密
黑产攻击
…
微服务架构原理及特征
基本概念
服务(Service)
一组具有相同逻辑的运行实体
实例(Instance)
一个服务中,每个运行实体即为一个实例
实例与进程的关系
实例与进程直接没有必然对应关系,一个实例可以对应一个或多 ...
『字节青训营-3rd』L14:HTTP 框架修炼之道
再谈 HTTP 协议
为什么要协议
协议里有什么
PUT:完整更新
PATCH:部分更新(不幂等)
一个 Demo
请求流程
不足和展望
01总结
HTTP 框架的设计与实现
分层设计
应用层设计
中间件设计
路由设计
如何做设计
协议层设计
网络层设计
(避免阻塞)
02总结
性能修炼之道
针对网络库的优化
针对协议的优化
Headers 解析
Header key 规范化
热点资源池化
03总结
企业实践
『字节青训营-3rd』L13:深入浅出 RPC 框架
相关链接学员手册:第十三节:深入浅出 RPC 框架
基本概念
本地函数调用
远程函数调用
RPC 概念模型
一次 RPC 的完整过程
RPC 的好处
RPC 的问题
01小结
分层设计
以 Apache Thrift 为例
编解码层
生成代码
数据格式
二进制编码
选型
协议层
概念
协议构造
多路复用:一个连接内有多个请求流
协议解析
网络通信层
Sockets API
网络库
02小结
关键指标
稳定性
保障策略
请求成功率
长尾请求
注册中间件
易用性
扩展性
观察性
高性能
03小结
企业实践
Kitex
自研网络库
背景
Netpoll
扩展性设计
性能优化
网络库优化
编解码优化
合并部署
04小结
『Git』如何使用 Git 参与杭助的项目
前情提要:
这几天开始参与字节跳动青训营的小组项目,沿用的是助手的团队开发模式,鄙人因为不熟悉 Git 的而吃了亏(基本上是学一次忘一次,下次一定好好做笔记),特写本文总结一套正确的操作逻辑,也同时为后来人指路
首先,你可以根据个人喜欢使用 GoLand 的图形界面或者纯命令行,二者的效果是相同的
PS:下图中我的 GoLand 是换过主题的,但是按钮的位置没有变,大差不差
怎么将项目克隆到本地?
使用图形界面使用命令行打开 GoLand ,点击『从 VCS 获取』
然后输入仓库 URL ,建议是 SSH 格式的,可以从 GitHub 找到
本步对应的命令行是
1git clone [email protected]:h68u/h68u-tiktok-app.git
这里还牵扯到创建并把 SSH 密钥添加到 GitHub 之类的,在此不赘述
怎么为项目贡献我的代码?
助手的标准规范是:
从主分支新建 dev 分支,并以你的名字命名(如 NX-dev)
在这个分支上修改项目
提交本地分支到本地 git 储存库,再推送至 GitHub
在 GitHub 上合并到主分支,完成对主分支的更改
接下来详细说明
新建你的个人分支(git checkout)
点击右下角的「Git 分支」 按钮,从主分支新建分支
本步对应的命令为
1git checkout -b NX-dev
将更新提交到本地储存库(git commit)
在工具栏中找到 「Git」->「提交」,或者从右上角的按钮中找到提交
核对一下本次的变更内容,并且在左下角标注本次提交的信息,然后提交
注意:可能的 ...
『字节青训营-3rd』L12:数据结构与算法
因为参加数模比赛去了,所以没时间记录
『字节青训营-3rd』L11:Git 的正确使用姿势与最佳实践
Git 是什么
版本控制
版本控制是什么?
一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
本地版本控制
代表:RCS
依托于本地磁盘进行版本控制
集中式版本控制
代表:SVN
存在一个统一的远端服务器,用于版本控制,本地不存储版本控制
分布式版本控制
代表:Git
每个库都拥有所有的版本控制信息,远端服务器用于不同库之间进行版本信息同步
Git 发展历史
最初版由 Liunx 创始人 Linus Torvalds 花两周时间开发而成,主要是为了用于 Linux 项目的维护
Git 基本使用方式
Git 目录介绍
项目初始化
123mkdir democd demogit init
其他参数
--initial-branch 初始化的分支
--bare 创建裸仓库(纯 Git 目录,没用工作目录)
--template 通过模板构建自定义 git 目录
观察 .git 目录
HEAD:当前的分支
config:配置
objects:文件信息
refs:分支信息
hooks 里面的一堆 .sample 文件是例子,不会执行
工作区和暂存区
Git Config
不同级别的 Git 配置:全局、系统、当前
低级别可以覆盖高级别
常见的 Git 配置
用户名配置
12git config --global user.name "xxx"git config --global user.email [email protected]
Instead of 配置
相当于替换
1git conf ...
『离散数学』数理逻辑:命题逻辑等值演算
等值式
析取范式和合取范式
主析取范式和主合取范式
『离散数学』数理逻辑:命题的基本概念
命题的概念
命题联结词
公式的类型
『字节青训营-3rd』L10:架构初探-谁动了我的蛋糕
相关链接学员笔记:第十节:架构初探 - 谁动了我的蛋糕
什么是架构
架构定义
问题
单机
单体、垂直应用 | 垂直切分
SOA、微服务 | 水平切分
小结
竖着切:分不同种类事情
横着切:同一件事分几步
企业级后端架构剖析
背景
云计算
云原生
弹性资源
DevOps
微服务架构
服务网格
云原生蛋糕店
企业级后端架构的挑战
问题
离在线资源并池
自动扩缩容
微服务亲合性部署
流量治理
CPU 水位负载均衡
后端架构实践
问题背景
问题提炼
自适应静态权重
自适应动态权重 Alpha
自适应动态权重 Beta
自适应动态权重 Release
尾声
『Others』苏系坦克 T-64/72/80/90 型号辨别
❤️本期内容整理自B站视频【军事科普】如何识别T-64/72/80和T-90
一般来说,战雷里遇到这些苏系锅盖头都是直接打驾驶员观察口,都怎么区分具体型号
今天逛 B 站看见了这个视频,感觉有必要记一下笔记
但是太忙了,简单地说就是炮塔,屁股,首上,负重轮,红外大眼的区别
等有空去战雷里截点图来展示一下
『WSL』在 WSL 中使用主机的代理(以 Clash 为例)
困惑了我很久的问题今天终于被我解决惹~让我赶紧把它记录下来
确保 Windows 上的代理可用
运行 Clash,打开 Allow LAN 和 System Proxy
然而我发现 Profiles 里 allow-lan 还是 false,安全起见还是手动给它编辑一下
在终端中试一下有没有代理
1curl https://www.google.com
在 WSL 中连接主机的代理
将下面函数加入到~/.profile中,记得编辑端口
12345678910111213141516export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*') #获得网关地址export proxyPort=1080 #端口alias proxy=' export https_proxy="http://${hostip}:${proxyPort}"; export http_proxy="http://${hostip}:${proxyPort}"; export all_proxy="http://${hostip}:${proxyPort}"; echo -e "Acquire::http::Proxy \"http://${hostip& ...
『字节青训营-3rd』L9:将我的服务开放给用户
相关链接学员笔记:第九节:将我的服务开放给用户
课前准备 (摘自学员笔记)
专有名词
权威DNS:保存了相应域名的权威信息。权威DNS即通俗上“这个域名我说了算”的服务器
LocalDNS:缓存+递归查询,运营商(集团网)部署的本地DNS服务器,直接接受网内客户端请求
根DNS服务器:全球有13台,LocalDNS未命中缓存查询的起点服务器,其公网地址具体可参考www.iana.org/domains/roo…
DNS Update:DNS主服务器master接受外部的变更指令
DNS Notify:DNS主服务器master接受变更命令后,会自增自身的serial号,同时将变更的serial号告知从服务器slave
DNS IXFR:DNS从服务器slave以增量的形式向master要求获取本次变更的内容
DNS AXFR:DNS从服务器slave以全量的形式向master要求获取当前的全量数据
对称加密:使用相同的秘钥来加密传输内容,一端加密后,对端收到数据会用相同的秘钥来解密
非对称加密:如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
静态加速:针对视频、图片等不变的内容,将其缓存在靠近用户的边缘节点,缓存预热后用户直接从边缘获取,从而加速访问速度;
动态加速DCDN:针对API类返回值不同的请求,通过特殊的网络优化方式(路由优化、传输优化)等技术加速其达到源站的速度。
VIP:虚拟IP,一般作为四层反向代理的入口,client看起来一直在与VIP交互
R ...
『字节青训营-3rd』青训营 x 掘金技术社区专场班会
如何在掘金高效学习
一个帮助开发者成长的社区
学习的价值:编程技术处于高速更新换代中
分享的价值:在分享中成长,鼓励开源精神
掘金社区要解决的问题:
定位:面向全球中文开发者提供优质技术内容
文化:坚信善于分享和学习优质内容的开发者会成长得越来越好
规则:激励持续输出原创优质内容的用户
高效获取内容
多平台
标签体系
优秀技术团队/创作者
干货直播
学习课程
高效笔记
使用掘金插件写笔记
持续写文章
休闲交流
JYM,欢迎来沸点摸鱼
各种活动
从 Go 菜鸟到 Go 专家
技术深入
成为专家的路线
学习基础语法与使用
学习问题与解决方法
学习原理和底层设计
必须掌握的工具
各种 IDE
GitHub
Go 的调试器 DELVE
性能分析工具
邻域拓展
一手的消息源
理性看待技术文章
社区参与
了解开源技术组织和社区
工业界广为接受的开源技术组织
Apache
CNCF
etc
Go 语言本身的技术社区
golang-nuts
golang-dev
为什么要参与开源社区
哪些社区项目值得参与
我喜欢的
星星多的
名气大的
我想去的公司的项目
思考总结
为什么要总结
科学的总结方法
卡片笔记
个人代码库
体系化总结
多做技术方面的输出
将笔记内容组织为文章输出
打造个人品牌
著书立说
『字节青训营-3rd』L8:打开抖音互联网会发生什么
刷抖音网络是怎么交互的
网络接入
互联网
路由
路由发包原理
同网段:配置网段即可默认添加静态路由。获取对端MAC直接发包
跨网段:配置网关路由。获取网关MAC地址发包
动态路由:BGP/OSPF等,路由表在动态变化
路由是网状的,不一定是对称的
路由传递时,始末 IP 是不变的, 始末 MAC 地址是一直改变的
ARP协议
ARP广播/应答:协议原理
免费ARP:主动广播告知MAC地址
ARP代理:虚拟网络/伪造MAC地址
ARP 的本质是查找下一跳的 MAC ,不是请求目标地址
IP 协议
Q:为什么不能用 MAC 代替 IP 地址?
MAC 协议是在第二层的,但是第二层还有很多其他的协议,为了兼容其他二层的协议就又封装了一层 IP
Q:IPv4不够用,除了IPv6还有什么方法
使用 NAT
NAT
NAT 是不是就改了改 IP 地址呢?
NAT 同时改了 IP + 端口
网络传输
数据包
本质上是一段内存,里面存储的内存是有序的,一般是按照TCP/IP的多层协议去封装。拆包/封包都是按照协议去写内存/读内存。
数据包发送
先请求 DNS
递归迭代解析
DNS 的传输协议 UDP
协议简单
想发什么包,就分配一个 UDP 的头,把 payload 里面塞数据发出去就好
需要考虑可靠性的场景使用复杂
每次发多少?怎么避免分片?
怎么知道没丢包?
怎么权衡传输效率和质量?
TCP 三次握手
什么是 TCP 连接?
拔了网线,连接会断吗?(靠心跳包探活)
你真的了解 TCP 三次握手吗?
三次握手:确认传输的序列号/MSS/Op ...