《2017年爱奇艺高可用高性能服务器编程架构实践.pdf》由会员分享,可在线阅读,更多相关《2017年爱奇艺高可用高性能服务器编程架构实践.pdf(17页珍藏版)》请在三个皮匠报告上搜索。
1、爱奇艺高可用高性能服务器编程架构实践2017.11背景 对于高可靠、高可用框架的要求 1、应用服务的不间断性:1.1、服务程序可在线热升级1.2、数据及配置可在线重新加载 2、应用服务可运维可监控:2.1、服务异常自动重启2.2、服务异常自动报警2.3、服务配置项一致性2.4、服务进程统一管理 为什么需要高并发、高性能框架?1、互联网尤其是移动互联网的快速蓬勃发展对服务端应用的压力与日俱增2、高性能、低延迟的业务需求对应用服务提出了更高的要求3、内网中 RPC 通信、连接池的大量存在要求服务端支持大并发、高性能Acl 服务器编程框架内容分类内容分类功能项功能项服务器模型服务器模型多进程服务模型
2、、多线程服务模型、多线程服务模型、非阻塞服务模型、触发器服务模型、网络协程服务模型安全运行机制安全运行机制严格的用户权限限制,防止越权操作;IP 地址访问控制,防止非法地址访问配置驱动方式配置驱动方式独立的服务配置文件,丰富的配置项:进程数、线程数、防问控制、监听地址、进程预启动等均由配置项决定服务监听服务监听支持绑定 TCP 套接口、UDP 套接口以及 UNIX 域套接口,支持同一进程同时绑定多个地址及端口服务管理服务管理支持应用服务在线热升级,升级过程不会中断服务;提供 WEB 管理接口及管理工具,方便远程管理运维监控运维监控提供应用服务进程管理模块,在线监控各个应用服务的存活状态,对异常
3、崩溃的服务实时报警运行方式运行方式生产环境由 acl_master 服务管理进程控制管理;开发环境可以手工单独运行开发调试开发调试用服务器生成向导直接生成服务器程序框架;用 valgrind 检查服务程序的内存问题Acl 服务器框架模型memorydata structurelogstreamnetthreadTPollconfigureevents(select/poll/epoll/kqueue/iocp/wmsg)fiberProcessesThreadsAioFibersUdpTriggersTQueueaiohttpsmtpicmpmemcacheredisbeanstalkmysq
4、ljsonxmlmimecoderurlbase64uucodecharsetQP基础层通信层协议层服务层基础层通信层协议层服务层sslmasterDNSWEBDBCDNGAME应用层应用层MAILCHATOS APILinuxFreeBSDWindowsMacOSAndroidIOS适配层适配层postgressqlsqlite网络协程调度-设计原理创建网络协程创建网络协程IO阻塞阻塞准备运行准备运行运行运行挂起协程挂起协程IO 调度协程调度协程由由IO协程监控协程监控IO唤醒协程唤醒协程IOIOIOIO编程要点:编程要点:1、每个网络连接对应一个协程2、遇到网络 IO 读/写 堵点就切走相
5、应协程3、将 IO 句柄由 epoll 协程进行监控4、IO 准备好时其对应协程重新加入调度队列网络协程应用场景 一、问答式应用服务基于 HTTP 协议的服务应用,诸如:网站基于 SMTP/POP3/IMAP 协议的服务应用 二、生产者 消费者类应用服务如消息队列类应用 三、reactor 和 proactor 两种模式的结合统一的事件引擎监控所有的网络连接,有一个连接就绪时创建协程独立处理此类应用如聊天服务、游戏服务等无状态的应用服务 四、大并发类应用服务因为通过协程方式,将上层应用的堵塞式在底层转为非阻塞模式,所以非常容易以较低资源支持大并发类应用如内网的多数应用服务为提高效率都支持连接池
6、模式,需要服务端支持非常大的并发 五、网络限流在协程中可以直接 sleep,非常容易控制网络流量爱奇艺高性能高可用服务的工程实践 背景:1、如何支撑超 5 亿月活用户的视频收看?-海量用户、海量存储、海量带宽,每项都是巨大的挑战 2、如何达到热播剧的快速分发?-新发视频快速“送达”用户最近观影点,即发即播 3、如何达到视频流的快速开播?-不能让用户多等一秒 4、如何针对大文件进行有效回源?-这是 Squid/Apache Traffic/Nginx 目前都未解决的问题CDN 回源系统开发历程 遇到的坑:1、Squid,Apache Traffic,Nginx 无法针对大文件进行有效合并回源 2