go语言开放服务 | 青训营

81 阅读4分钟

开放服务

1使用域名系统

1.1Host管理

/etc/hosts下

Host ip映射
  • 流量和负载:用户规模指数级增长,文件大小越来越大,统一分发引起较大的网络流量和cpu负载
  • 名称冲突:无法保证主机名称的唯一性,同名主机添加导致服务故障
  • 时效性:分发靠人工上传,时效性太差

1.2域名系统

使用域名系统替换hosts文件

域名空间

  • 域名空间被组织成树形结构
  • 域名空间通过划分zone的方式进行分层授权管理
  • 全球公共域名空间仅对应一棵树
  • 根域名服务器:查询起点
  • 域名组成格式: [a-zA-Z0-9_ -], 以点划分label

1.3购买配置域名

在阿里巴巴可以购买域名

域名备案:防止在网上从事非法的网站经营活动,打击不良互联网信息的传播,一般在云厂商处即可进行实名认证并备案

修改配置:

  • 清空/etc/hosts
  • 配置/etc/resolv conf中nameservers为公共DNS迁移原配置,通过控制台添加解析记录即可

1.4开放外部访问

方案:租赁一个外网ip,专用于外部用户访问门户网站,将 自定义域名 解析到外网ip,将该ip绑定到一台物理机上,并发布公网route,用于外部用户访问。

2自建DNS服务器

2.1域名解析过程

  1. 主机首先向其本地域名服务器进行递归查询。
  2. 本地域名服务器采用迭代查询,它先向某个根域名服务器查询。
  3. 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器的IP地址。
  4. 本地域名服务器向顶级域名服务器进行迭代查询。
  5. 顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的IP地址。
  6. 本地域名服务器向权限域名服务器进行迭代查询。
  7. 权限域名服务器告诉本地域名服务器所查询的域名的IP地址。
  8. 本地域名服务器最后把查询的结果告诉主机。

2.2开源

  • 常见的开源DNS: bind、 nsd、 knot、 coredns

3接入https协议

  • 对称加密数据传输
  • 非对称加密数据传输

3.1SSL

获取密钥

  • client random
  • server random
  • premaster secret
  • 加密算法协商

client验证签收

  • 是否是可信机构颁布
  • 域名是否与实际访问一致
  • 检查数字签名是否一致
  • 检查证书的有效期
  • 检查证书的撤回状态

4接入全站加速

  • 源站容量问题

    增加后端机器扩容;静态内容,使用静态加速缓存CDN

  • 网络传输问题

    动态加速DCDN

  • 全站加速

    静态加速+动态加速

5 4层负载均衡

基于IP+端口,利用某种算法将报文转发给某个后端服务器,实现负载均衡地落到后端服务器上。

5.1三个主要功能

  1. 解耦vip和rs
  2. NAT
  3. 防攻击: syn proxy

5.2特点

  1. 大部分都是通过dpdk技术实现,技术成熟,大厂都在用
  2. 纯用户态协议栈,kernel bypass,消除协议栈瓶颈
  3. 无缓存,零拷贝,大页内存(减少cache miss)
  4. 仅针对4层数据包转发,小包转发可达到限速,可承受高cps

6 7层负载均衡

  • SSL卸载:业务侧是http服务,用户需要用https访问
  • 请求重定向:浏览器访问某域名自动跳转
  • 路由添加匹配策略:完全、前缀、正则
  • Header编辑
  • 跨域支持
  • 协议支持: websocket、grpc、quic

6.1使用Nginx

  • 模块化设计,较好的扩展性和可靠性
  • 基于master/worker架构设计
  • 支持热部署:可在线升级
  • 不停机更新配置文件、更换日志文件、更新服务器二进制
  • 较低的内存消耗: 1万个keep-alive连接模式下的非活动连接仅消耗2.5M内存
  • 事件驱动:异步非阻塞模型、支持aio, mmap (内存映射)

nginx反向代理

nginx事件驱动

nginx异步非阻塞

  • 一个进程/线程处理多个连接/请求异步非阻塞模型、减少OS进程切换

提升cpu效率

  • multi_ accept允许worker同时接受新连接
  • accept mutex解决惊群问题
  • reuseport监听同端口,内核负载均衡

提升网络效率

  • 连接复用 减少upstr eam建连
  • 使用Cache 超时时间对业务的影响
  • gzip压缩 会增加cpu开销,需平衡使用
  • 开启proxy_buffering 谨慎设置proxy_buffer 大小,磁盘io读写