同城的跨平台高性能,高可用的中间层服务架构设计分享

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

58同城跨平台高性能高可用中间层服务架构设计分享58同城陈春2012-09-10关于我姓名:陈春58同城-技术中心-架构部在58同城主要负责基础架构,跨平台分布式服务,通用组件,基础支撑框架的设计与研发相关工作.有幸参与了58同城多个重大核心系统的设计与研发工作sina微博:@58陈春关于这次分享主要介绍如何塔建一个跨平台,分布式,高性能,高可用的中间层服务,以及58.com开源的中间层服务框架(容器)--Gaea(盖亚)目录:1.设计异构平台高可用,高性能的中间层服务的挑战2.常见的解决方案3.58.com的解决方案4.Gaea的设计和实现细节设计一个异构平台中间层服务有哪些挑战?异构平台=如何跨平台?如何通讯,采用哪种通讯模型?采用什么协议?如何序列化(json,xml,binary…)?每秒上万(几十万)次的请求=如何保证高吞吐,低延时?7*24不间服务=热布署?采用哪种HA方案?服务有(无)状态,两次请求是否有上下文关系?服务有(无)事务,如何解决?是否方便扩展,是否可以通过简单的加机器来解决性能问题?……常见的解决方案.net=WCF,RemotingWindows通信基础(WindowsCommunicationFoundation)是基于Windows平台下开发和部署服务的软件开发包Java=EJB,RMIEnterpriseJavaBeansun的服务器端组件模型,最大的用处是部署分布式应用程序WebService–描述数据的方法:XML–信息交换的协议:SOAP–传输协议:HTTPRestFull–HTTP原语封装,回归HTTP本性(get、post、put、delete)–业界开放api新标准–面向资源开发–公开目录结构式的URInetflix,dubbo,Hessian,JBoss-Remoting,xxxRPC…..其他的一些解决方案google=ProtocolbufferPB是一种用于序列化结构化数据的机制,它具有灵活、高效、自动化的特点。在Google几乎所有它内部的RPC协议和文件格式都是采用PBfacebook=ThriftThrift最初由Facebook于2007年开发,2008年进入Apache开源项目。跨平台通信中thrift可以作为二进制的高性能的通讯中间件,支持数据(对象)序列化和多种类型的RPC服务58想做什么?让一般的程序员能够快速的开发出和优秀程序员一样高效,安全,稳定的跨平台中间层服务学习成本要足够的低,只需要看很少的文档或看个简单的demo就能快速上手开发效率要足够高,能够快速的开发出一个高质量的服务程序运行速度要足够快,能够轻松应对每秒上万次的QPS,占用机器资源要尽可能的少运维要足够的方便,各种指标的监控方便运维和定位问题健状性要足够的好,需要有很好的HA和负载均衡机制要能够跨平台,58同时有java,c++,.net(少量老项目)项目怎么做?服务开发者=不需要关心通讯细节不需要关心序列化细节不需要关心HA不需要关心如何跨平台有很完善的监控和性能计数器功能方便快速定位问题只专注于具体的业务处理服务调用者=就像调用本地方法一样,其他细节均无需关心•通讯组件•跨平台序列化组件•客户端•服务容器动态代理负载均衡网络通讯GaeaClient(组件)GaeaSerializer(组件)GaeaServer(容器)GaeaProtocol(组件)网络通讯过虑器服务代理&热部署服务监控权限控制等待窗口Gaea实现细节如何跨平台服务端:Java开发,宿住在Gaea服务端容器里serializerprotocolclientJavaserializerprotocolclientC&C++serializerprotocolclient.NETserializerprotocolclientXXXTCP长链接,遵守相同的传输协议Gaea通讯协议SFP(传输协议)SDP(数据协议):-RequestProtocol(请求协议:lookup,methodName,paramKVList)-ResponseProtocol(响应协议:result,outParam)-ExceptionProtocol(异常协议:toIP,fromIP,errorCode,errorMsg)Gaea序列化.跨平台=定义统一的序列化协议.序列化出来的数据包要尽可能的小=二进制,无元数据.支持泛型,支持多重继承.使用要尽可能的方便,尽量排除干扰RD的困素,让RD的精力集中在业务处理上(为什么不用pb?)GaeaClient请求处理模型动态代理java.lang.reflect.InvocationHandler等待窗口(WaitWindow)过载保护一.每一个Servernode都有一个请求记数器(请求进来+1返回后-1)二.超时时间生成器(保护Client)a.gaea.config配置的超时时间其实是一个种子时间b.超时时间生成器根据种子时间和请求记数器的值动态的生成每次请求的超时时间三.负载丢弃(保护Server)HA&负载均衡.一个服务至少同时部署在两台或以上的机器.Client在对node进行调度的时候可以配置权重.Client对ServerNode健康检测.Client重试机制.无缝重启:gaea_restart.sh-服务端下发重启命令-client收到后之后的请求不再转发给这台server-server达到指定的时间后重启-client经过指定的时间周期后偿试链接该serverServer端访问权限控制IP黑白名单:通过IP黑白名单设置(可是指定的ip,也可以是一个网段)达到对访问者进行一个比较粗粒度的控制方法调用授权:可以细粒度的进行访问限制(具体过程见下图)ServerFilters应用示例:1.GeaeServer协议解析与生成2.访问执行情况时时查看MonitorFilter3.记录方法被哪些IP调用过?服务运行状态时时监控器telnet运维来看一个基于Gaea开的demoJusttryit~第一步:定义接口,打上相关的注解第二步:写具体的实现,打上相关的注解第三步:在传输的实体上打相关的注解Done!!!服务开发完成Client端调用示例:Done!!!客户端如同调用本地方法Gaea的生产应用58.com基乎所有的服务都是基于Gaea开发的(大大小小服务加起大约有100多个)其中访问量比较高的几个服务:信息管理服务(58.com的核心服务,已经生产环境上运行了快三年)QPS:1.4W用户管理服务QPS:8K安全性要求比较高的服务:58交易系统的相关服务后续GaeaRoadMap一.写个Eclipse插件集成到Eclipse方便开发人员调试(像tomcat一样)二.自动生成不同平台接口的功能三.应用程序域的概念四.运维监控平台关于开源Gaea开源啦~命名为Gaea(盖亚)之后58.comSPAT所有开源的项目都以希腊神话中的人物名称来命名项目后续还会有:WF(web开发框架)github:谢谢!

1 / 34
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功