服务器开发-框架与架构概述

框架

1. 网络通信

  1. 客户端连接检测
  2. 接受客户端连接
  3. 客户端数据检测
  4. 客户端数据接收
  5. 发送数据给客户端
  6. 连接异常检测
  7. 连接的关闭
  8. 客户端连接的发起

2. I/O复用

select/poll/epoll

3. 检测网络事件

4. 连接关闭(主动/被动)

被动关闭连接:检测到连接异常事件(例如:EPOLLERR)或对端关闭连接(send或recv返回0)
主动关闭连接:主动调用close或shutdown

5. 发送缓冲区/接收缓冲区

发送缓冲区和接收缓冲区每一个socket连接都存在一个,应该可以动态增长,按需分配

6. 协议设计

  1. Json
    1. 优点
      1. 跨语言
      2. 文本协议 可读性好
      3. 简单易用,开发成本低
    2. 缺点
      1. 体积大
      2. 无版本检查,自己做兼容
      3. 数据解析复杂
      4. 文本格式,安全性差
  2. Protobuf 二进制协议 可读性差
    1. 优点
      1. 跨语言,自定义数据结构
      2. 字段被编号,新添加字段不影响老结构,向后兼容
      3. 简单易用,自动生成代码
      4. 二进制消息,效率高,性能好,安全性高
    2. 缺点
      1. 二进制格式,可读性差
      2. 对象冗余,字段很多,生成类较大,占用空间

7. 服务器程序结构组织

8. 多进程/多线程/协程

9. 内存管理

  1. 内存分片和内存碎片 gcc默认内存管理器ptmalloc
  2. 更好的内存管理器tcmalloc
    1. tcmalloc在链接时替代标准libc中的malloc和free,不改动代码的情况下解决内存碎片问题
    2. tcmalloc的malloc和free函数速度快
    3. tcmalloc优化了小对象存储
    4. tcmalloc对多线程做了优化
  3. 内存池(自己管理内存)

    10. 连接池

    11. 线程池

架构

1. 接入层

2. 负载均衡

  1. 求余法
  2. 一致性哈希

3. 缓存

4. 数据库

5. 日志上报

6. 名字服务

7. 配置服务

8. 队列(解耦合)

开源组件

zookeeper

zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和hbase的重要组件,为分布式应用提供一致性服务.提供java和c的客户端.

etcd

etcd是一个开源的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现。etcd相比zookeeper是轻量级的.etcd基于HTTP+JSON的API易于使用
raft算法,保证数据一致性,协议简单,容易实现

rabbitmq

kafka

mysql

redis

nginx

tcmalloc