这是我参与「第三届青训营 -后端场」笔记创作活动的的第9篇笔记.
将我的服务开放给用户
一、接入问题引入
1.1 经典问题
访问 www.toutiao.com 到网页加载出来都经历了哪些过程?
- 域名解析
- TCP连接
- SSL握手
- ......
浏览器抓包
根源或本质? 只需要关注首次访问的请求
1.2 字节接入框架
二. 企业接入升级打怪之路
2.1 使用域名系统
2.1.1 Host 管理
随着example公司业务规模和员工数量的增长,使用该方式面临的问题:
- 流量和负载:用户规模增长,文件大小越来越大,引起较大的网络流量和cpu负载
- 名称冲突:无法保证主机名称的唯一性,同名主机添加导致服务故障
- 时效性:分发依靠人工上传,时效性差
2.1.2 使用域名系统
使用域名系统替换hosts文件
关于域名空间:
- 被组织成树形结构
- 通过划分zone的方式进行分层授权管理
- 全球公共域名空间仅对应一棵树
- 根域名服务器:查询起点
- 域名组成格式:[a-zA-Z0-9_-],以点划分label
2.1.3 域名购买与配置迁移
域名备案:防止网上从事非法运营活动,需要实名认证
- 修改配置:清空/etc/hosts
- 配置/etc/resolv.conf中nameservers为公共DNS
- 迁移原配置,通过控制台添加解析记录
2.1.4 如何开放外部用户访问
租赁一个外网ip,专用于外部用户访问门户网站,将www.example.com 解析到外网,将ip绑定到物理机上,并发布公网route,用于外部用户访问。
2.2 自建DNS服务器
2.2.1 问题背景
- 内网域名的解析也得出公网去获取,效率低下
- 外部用户看到内网ip地址,容易被攻击
- 云厂商权威DNS容易出故障,影响用户体验
- 持续扩大公司品牌技术影响力,使用自己的DNS系统
2.2.2 DNS查询过程
2.2.3 DNS记录类型
2.2.4 权威DNS系统架构
常见的开源DNS:bind,nsd,knot,coredns
2.3 接入HTTPS协议
2.3.1 出现的问题
- 页面空白/出现一些神奇的东西
- 返回403页面
- 搜索问题带小尾巴,经常闪烁
- 弹窗广告.......
HTTP明文传输,弊端明显
2.3.2 对称加密与非对称加密
2.3.3 SSL通信过程
- client random
- server random
- premaster secret
- 加密算法协商 -> 对称密钥 session key
2.3.4 证书链
Server端是发送带签名的证书链
Client会收到但是仍然需要验证
- 是否是可信机构颁布
- 域名与实际访问的一致性
- 数字签名是否一致
- 证书的有效期
- 证书的撤回状态
2.4 接入全站加速
2.4.1 问题背景
2.4.2 解决方案
- 源站容量问题:增加后端机器扩容,静态内容,使用静态加速缓存
- 网站传输问题:动态加速DCDN
- 全站加速:静态加速+动态加速
2.5 四层负载均衡
2.5.1 什么是四层负载均衡
基于IP+端口,利用某种算法将报文转发给某个服务器,实现负载均衡落在后端服务器上。
2.5.2 常见调度算法原理
- RR轮询:Round Robin 将所有的请求平均分配给每个真实服务器RS
- 加权RR轮询:给每个后端服务器一个权值比例,将请求按照比例分配
- 最小链接:把新的连接请求分配到当前连接数最小的服务器
- 五元组hash:根据sip、sport、proto、dip、dport对静态分配的服务器做散列取模
- 一致性hash:只影响故障服务器上的连接session,其余服务器上的连接不受影响