李弈远zjulyy@163.com网易(杭州)网络有限公司前台技术中心基础平台技术2011年6月25日网易服务集成框架的构建与运维网易服务集成框架的构建与运维网易(杭州)网络有限公司陈述内容网易运维监控平台2FutureWork4网易服务集成框架31服务集成框架运维33网易服务集成框架的构建与运维网易(杭州)网络有限公司研究背景与意义产品日益丰富,服务接口迅速增长产品服务之间紧耦合核心产品服务被其他产品依赖核心产品功能堆积WebServiceHessianRMI抽取和独立服务以提高可重用性和性能功能的堆积、服务耦合的增加给系统运维带来了诸多问题网易服务集成框架的构建与运维网易(杭州)网络有限公司研究背景与意义(cont’d)功能堆积、服务紧耦带来的不利影响随着服务的不断增多,需要将某些核心服务独立出来进行部署(如本地-远程),并对服务间依赖关系进行解耦大部分WEB调用服务的接口依然是同步接口,一旦服务发生问题容易产生连锁反应,任意一个服务的失败或过载同时会影响宿于该产品的其他服务由于不同的服务对网络、CPU、内存、磁盘的需求不同,会造成服务的宿主(产品本身)很难从硬件上为某个服务做最合理的优化以达到性能的最大化服务的更新粒度过大,更新一个服务容易影响同一产品下的其他服务服务的提供方式不一致且缺乏统一的管理配置,使开发人员在需要使用一个服务时无从下手服务独立出来部署或者改变部署位置时,依赖此服务的各个产品需同步修改配置或代码服务调用时需了解服务的具体细节,如服务对外暴露链接等网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路服务集成框架需要实现如下目标服务位置透明调用者无需关心服务是位于本地同一个VM下或是位于远程某一台服务器上服务过载保护当某个服务发生过载或失败时,确保异常不会扩散远程调用的行为一致性支持各类主流的远程调用方案的前提下,提供将各类服务转化为远程调用的一致配置方法高可靠性&高性能在提高系统可靠性的同时,对服务性能带来的影响尽可能小同步&异步支持同步和异步调用方式,支持基于优先级的方法调用过滤无代码侵入性上述几点不应带来代码侵入性,开发人员无需学习新的API网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)采用ESB隔离异常的核心概念Fail-fast&Fail-safe服务层面的SEDA模型控制Client消耗在特定服务的抽象资源上限控制Server端能够提供的抽象资源上限抽象资源概念:抽象资源不具体指CPU、内存、IO等具体资源,而是对应于服务的处理能力,这点与Load的概念有些类似网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)传统的多线程模型工作原理:对于每一个request,dispatcher会为其创建并分配一个线程。该线程负责这个请求的处理;优点:执行粒度是整个完整的处理流程,处理逻辑清晰,容易开发;缺点:随着处理请求不断增加,导致并发执行的线程数量太多。过多的线程数量导致系统在线程调度和资源争用上的开销过大。引起系统性能急剧下降。导致系统处理能力下降;网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)多线程模型负载网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)SEDA模型结构:接受输入的EventQueue;应用开发者编写的EventHandler;用于对执行过程进行控制的Controller;用于并发处理的ThreadPool;工作原理:将每一个处理步骤独立为一个Stage,Stage的输入通过EventQueue获得;Stage的输出以Event形式推送到其他Stage的EventQueue中;Stage之间的这种连接关系由应用开发人员指定;网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)ESB负载控制网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)ESB性能模型网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)原理示意ClientChannelProxyHandlerTransparentServerEventQueueClientSideWorkers(ThreadPool)ResourceControlStrategyEventQueueServerSideWorkers(ThreadPool)ResourceControlStrategy通过资源控制策略来防止客户端或服务器端过载直接拒绝服务策略设置合适的EventQueue长度限制与Worker线程数;带优先级的拒绝服务策略应用实现优先级回调接口,根据Event内容指定事件优先级,当发生异常时优先满足高优先级事件的处理;网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)基于ESB的服务集成框架如果请求被拒绝,服务请求方该如何处理?和应用逻辑相关,因此由开发者自行处理。网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)需要解决的问题完备描述服务配置的配置协议远程调用的方式各具特点,需要结合各类调用方式的共性与差异来制定配置协议,并考虑不同产品、不同版本、不同开发阶段的服务暴露,以完备地描述各类远程调用半异步方式调用带来的差异执行服务的线程与调用服务的线程不是同一个,会影响一些使用了线程私有变量或是当前线程状态的服务服务注册表服务的可靠性所有的服务配置均位于服务注册表中,需充分考虑注册表服务的可靠性问题,以及在注册表服务失败时的对策问题Proxy/Stub的自动生成问题由于需要根据配置来生成Proxy/Stub,因此将涉及到依据配置进行代码生成的问题网易服务集成框架的构建与运维网易(杭州)网络有限公司解决思路(cont’d)服务集成框架实现了服务位置透明服务信息通过中心节点统一进行注册和访问服务过载保护基于SEDA模型,通过资源控制策略,避免过载,防止异常扩散服务调用的行为一致性为各类服务转化为主流远程调用(包括http、hessian、rmi、jms、socket、mina、webservice、rest等协议)以及本地调用提供了一致的配置方法高性能单个调用情况下,性能影响1ms同步&异步支持同步和异步调用方式,支持基于优先级的方法调用过滤无代码侵入性添加配置文件即可对已有服务实施ESB服务切换快捷远程调用协议切换、本地/远程调用切换、不同产品/版本/开发阶段服务切换网易服务集成框架的构建与运维网易(杭州)网络有限公司示例beanid=“blogServiceHessianConfigurationclass=com.netease.integration.engine.common.Configurationparent=abstractServiceHessianConfigurationpropertyname=configurationspropspropkey=serviceInterfacecom.netease.space.service.BlogService/prop/props/property/bean服务提供方示例网易服务集成框架的构建与运维网易(杭州)网络有限公司示例(cont’d)beanid=“blogServiceclass=com.netease.integration.engine.hessian.IntegrationHessianProxyFactoryBeanparent=abstractIntegrationProxyFactoryBean/服务请求方示例网易服务集成框架的构建与运维网易(杭州)网络有限公司陈述内容网易运维监控平台2FutureWork4网易服务集成框架31服务集成框架运维33网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台设计目标解决应用级监控问题支持多种语言环境提供全面的报警功能覆盖传统监控软件功能网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台(cont’d)举例:博客中可能需要监控,日志发表情况、相片上传情况等邮箱需要监控日志发送、附件上传等举例:A服务每小时只在指定时间执行1次,只需关注这次执行的情况B服务执行非常频繁,由于依赖第三方接口,允许少量的失败什么是应用级监控业务逻辑相关监控信息的判断标准随业务逻辑的变化而变化网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台(cont’d)应用级监控的困难该收集什么样的信息用于监控?根据信息如何判断应用的状态?各产品、服务愿意为监控引入多少复杂度?网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台(cont’d)推论:应用级监控无需关心集群中单个节点的监控数据应用级监控的解决方案基于WEB应用架构的假设业务逻辑相关的监控数据始终以集群为单位处理不应存在集群中的一个或几个特定节点具有特殊的业务逻辑的情况。网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台(cont’d)实际表达的信息为:{namespace,key,{timestamp,number}}应用级运行时数据采集应用按照一定的规范暴露运行时数据数据形式为{timestamp,number}实践证明时间戳+数值的表现形式已能很丰富的展现运行时状态采集到的数据根据监控平台中服务集群的定义对数据进行加权,变化率计算等标准处理网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台(cont’d)WHY?因为各类应用的逻辑千变万化,只有开发者真正理解运行时数据的意义。提供监控的基础设施(数据采集,报表呈现,报警),让开发者仅关注运行时应用状态的分析即是监控平台的设计理念。数据的处理将运行时数据最终的分析逻辑交还给服务开发开发者采用脚本语言(可以是基于JVM的任意脚本)处理平台为其经过预处理的数据定义了API、DSL、类SQL的query接口以屏蔽监控数据的数据结构,便于开发者处理网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台(cont’d)多语言支持支持JMX接口以支持基于java的应用DynamicMbeans订阅模式采用AMQP协议各服务以json格式播报运行时数据网易服务集成框架的构建与运维网易(杭州)网络有限公司监控平台(cont’d)监控数据处理服务App-1Tomcat---JVMMBeanServerProduct.warMonitorJava.langCatalinaApp-n(PythonApp)MonitorDataProducerService加载用户监控脚本、运行、报警监控数据收集汇总、计算可用性打分、计算、绘图JMXQuery规则脚本服务CricleBlogStorageGroupWebUIMonitorDataSubscribe报警服务数据采集服务系统整体架构网易服务集成框架的构建与运维网易(杭州)网络有限公司陈述内容网易运维监控平台2FutureWork4网易服务集成框架31服务集成框架运维33网易服务集成框架的构建与运维网易(杭州)网络有限公司服务集成框架运维基本思路以服务为基本运维单位从服务信息注册节点获取服务配置信息及服务调用关系服务提供方/请求方运维数据通过JMX暴露监控每个服务所有提供方的运维数据监控每个服务所有请求方的运维数据网易服务集成框架的构建与运维网易(杭州)网络有限公司服务集成框架运维(cont’d)运维数据服务提供方请求处理时间请求处理数目请求处理失败数目服务请求方请求总数请求队列长度超时请求数目请求失败数目平均响应时间整个服务平均响应时间平均处理时间平均入队列时间超时率处理失败率准入率网易服务集成框架的构建与运维网易(杭州)网络有限公司服务集成框架运维(cont’d)根据运维数据调整服务