孢子框架-通信架构

关于微服务通信基础知识可先行参考文章:

中文连接:http://dockone.io/article/549

英文连接:https://www.nginx.com/blog/building-microservices-inter-process-communication/

接口调用如果是远程调用,那么就构成了简单的分布式。最简单的远程接口实现方式是web service或rest。当然一个合理的分布式应用不仅仅是远程接口调用这么简单。还需要有负载均衡、缓存等功能。最简单实现分布式的技术是Rest接口,因为Rest接口可以使用现存的各种服务器,比如负载均衡服务器和缓存服务器来实现负载均衡和缓存功能。

使用负载均衡服务器后Rest接口的应用就可以进行集群部署形成分布式。但Rest接口通常用于对外发布的服务,也就是外网服务。内网服务往往要求更高的性能,比如采用netty来进行通信,这种情况下如何做到负载均衡呢?这个时候就需要一个第三方的组件来管理和进行负载均衡。这个第三方组件最常用的就是Zookeeper。

Zookeeper通过维护接口的列表及活动状态从而实现了负载均衡。因此除rest接口外其它的接口访问方式,如thrift、netty等,都需要zookeeper来提供负载均衡。如果需要缓存,那么还需要引入memcache或Redis等分布式缓存来实现。

连接文档的例子中,提到一个打车软件接口交互的场景,如下图。交互方式是这样的,乘客发起请求调用出行管理模块,出行管理模块通过一个“请求转发”模块分别再次调用乘客管理模块和司机模块进行处理,处理该乘客的打车请求,处理完后通过“通知”模块通知乘客。

这里主要关注“请求转发”模块。在孢子框架中,在开发初期建议所有接口都使用Rest接口。所以项目初期,“请求分发”模块在孢子框架中我们使用Nginx来实现。到了后期,如果要提升内部调用接口的效率,内部接口如果用thrift等实现,那么这个模块是通过Zookeeper来实现。

这个模块在业界还有一种典型的做法叫做“API Gateway”,API Gateway是一个服务器,也可以说是进入系统的唯一节点。这跟面向对象设计模式中的Facade模式很像。API Gateway封装内部系统的架构,并且提供API给各个客户端。它还可能有其他功能,如授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等。下图展示了一个API Gateway架构。如下图:

API Gateway介绍原文连接:https://www.nginx.com/blog/building-microservices-using-an-api-gateway/

孢子框架不提倡API Gateway的方式,这看上去就是一个传统的ESB服务总线,这岂不是又回到了传统SOA。虽然不提倡,但并不否定传统ESB强大和优点。如果一个企业肯花大力气来完成这个当然是好,这种宏观的东西对于大公司复杂业务处理还是有帮助的。从社会经济体制发展来看,虽然从生产公社制度(传统SOA)转变为个体承包责任制(微服务),但一些宏观的管理机构还是需要的,比如工商局、税务局,所有个体户都需要到工商局备案,并向税务局交税。ESB能完成类似功能、API Gateway也是。社会上工商局主要完成登记功能,不会去干涉个体经营,而ESB和API Gateway就有点过了,它们有些功能干涉了个体应用的执行,比如上面提到的缓存、静态响应处理等,这些都是个体应用关注的。所以这里我们还是提倡不去做ESB和API Gateway。没有ESB和API Gateway,那么负载均衡是怎么做,上文已经说明了,就是nginx和zookeeper。当然接口还是需要一些宏观功能需要处理,比如审计、监控。个体经营也需要审计,审计由审计局执行,也会被监控,警察局就是监控机构。那么分布式如果没有ESB和API Gateway,由谁来执行审计和监控呢,在孢子框架是这样完成的:

在孢子框架中所有宏观功能都是如此处理:前端发起请求,请求会先被“接口访问模块”处理,注意这个模块是请求方的功能模块。“接口访问模块”以独立jar包的方式提供给接口调用方使用,一般由接口使用团队开发,就是我们前面提到的框架里的org.spore.store.idl,这个模块不仅仅是封装接口调用统一视图,在里面还可以扩展审计、日志监控等宏观功能。它们可以发出的审计和日志监控请求,由专门的审计系统和日志监控系统处理。孢子框架使用nginx+接口访问层,或者zookeeper+接口访问层来实现宏观功能,代替传统ESB。之所以这样,因为我们认为个性化才是微服务的本质,要让每个服务都发挥出最大的主观能动性。

时间: 2024-11-05 00:42:36

孢子框架-通信架构的相关文章

孢子框架-网络游戏架构与微服务架构简单对比

笔者十年前做过网络游戏,当第一次看到微服务架构就发现它和网络游戏架构很像,如下图: 先来简单介绍一下这个网游架构,有些东西记不清了,如今的网游大牛看到可别丢砖头. 用户下载网游客户端,登录网游,首先会执行登录服务,登录服务主要就是给你分配一个网关,因为网关后面连接的才是真正的游戏服务器.登录后,进入游戏,发出指令,比如你移动到某个位置,这个指令会先发送到网关,然后再由网关识别发送到“移动系统”服务,移动系统计算后再经由网关发送给玩家客户端,玩家客户端执行一个动画让你移动到某个位置. 假如子服务间

孢子框架-互联网金融平台微服务架构设计

按照孢子框架要义对互联网金融理财平台进行微服务架构设计.假设我们设计的目标是5年后的陆金所(https://www.lu.com/).陆金所简介,平安集团旗下理财平台,是中国最大的网络投融资平台之一,2011年9月在上海注册成立,注册资本金8.37亿元,lufax结合全球金融发展与互联网技术创新,在健全的风险管控体系基础上,为中小企业及个人客户提供专业.可信赖的投融资服务,帮助他们实现财富增值.截至2014年1月末,注册用户已逾570万. l 需求分析 参照陆金所,获得如下核心需求矩阵. 分类

孢子框架(spore)-存储架构

web应用从单点向高并发架构演变时往往遇到最大的问题就是数据库的分布式存储.因为web应用本身就可以集群部署,但其所使用的数据库确是单点的.如果一个web应用开始的时候没有考虑数据库的分布式架构,那么等到要进行数据库集群改造时会发现困难重重,此时通常的做法是将原系统拆分成多个子系统,然后每个子系统访问一个数据库,这几乎重写了整个系统(如果这还不能满足需求,大型企业接下来会增加数据存储总线).很多厂商都是这么做的,包括淘宝.如果你开始你能够考虑到数据库集群,并且这种集群的设置并不增加开发工作量和难

孢子框架-微服务架构

微服务架构(Microservices ),是一个新的概念,但不是一项新的技术.看一下那些大型互联网企业,早在十年前就在使用类似架构,再看一下游戏行业,大型网游的架构从一开始就是采用类似的架构,这起码要追溯到二十年前. 微服务架构和传统SOA架构最大的区别是个性化(非通用化).传统SOA所采用的方式跟它的起源有关系,传统SOA是由IBM等大公司倡导的,它们把某些通用的企业应用封装成某类服务,然后卖给企业,企业就可以使用该服务,并且企业可以购买不同的服务进行组合.而互联网公司就不同了,它们从开始就

孢子框架(spore)-开发视图

一个典型的孢子框架开发视图如下,这只是一个应用,我们假设有一个“电子商店”的应用. 依赖关系如下: 不难看出只有接口访问层和服务接口之间是RPC通信,其它的都是JAR包调用.业务实体和公共模块提供给其它所有模块调用.公共模块封装了一些通用的工具,这些通用的工具如果比较大的话还可以单独作为一个JAR包,比如安全框架就可以独立为一个单独的JAR包,以及数据库分库类库也可以单独独立为一个单独的jar包. 在部署时只需要部署两个应用,分别是Web应用和Rest接口应用.另外一些公用模块也可以作为一些完整

孢子框架(微服务)成熟度模型.

笔者并不是微服务领域大牛,但当第一次看到微服务的概念就发现这是社会发展的必然趋势.记得在以前看到过一本书,现在也忘记是哪一本,里面提到将来社会的商业结构将不存在所谓的沃尔玛之类的大超市,而是以微商(个人提供商业服务)为主,那至少是在十年前的提法,当时都感觉不可思议,但现在看来还真有这个趋势.这个趋势和微服务的诞生其实都基于同样的原理:服务结构发展与社会发展同步.社会生产力要发展必须最大化个人的生产能力,所以社会整体生产力的提高的过程也是人的个性化发展的过程.以战争为例,封建社会军队使用人海战术,

【总结】游戏框架与架构设计(Unity为例)

使用框架开发游戏 优点:耦合性低,重用性高,部署快,可维护性高,方便管理.提高开发效率,降低开发难度 缺点:增加了系统结构和实现的复杂性,需要额外花费精力维护,不适合小型程序,易影响运行效率   常见框架 MVC  表现层(View):游戏画面.UI 逻辑层(Controller):数据接口,操作控制,AI 数据层(Model):数据保存,图片.声音等资源 我的SFramework中,View层是单独的,Model我放在基类中,Controller则在派生类,实现了MVC的分离(如果要重构的话我

搭建Activity与Fragment,Fragment与Fragment之间的通信架构

内心独白:  曾几何时但凡听到架构之两个字,总能联想到老子说的一句话:"玄之又玄,众妙之门".说不清,道不明.就像是看不见,摸不着,但又真实存在的东西给我们的那种感觉. 回顾人类的历史,繁重的劳动让我们意识到工具的必要性和重要性,并学会了去发明和使用工具.当我进行了大量的,甚至是繁重的编程之后,也开始重新意识到架构的必要性和重要性.当然软件工程发展了这么多年,构架与模式之类的东西前辈们早就说过并且践行与呼吁过,并且也留下了很多值得我们学习和研究的构架模式.但于我个人而言,在没有经历过痛

java设计模式、框架、架构、平台之间的关系

    设计模式<框架<架构<平台,从复用角度讲,设计模式是代码级复用.框架是模块级复用.架构是系统级复用.平台是企业应用级复用. 1.设计模式 为什么要先说设计模式?因为设计模式在这些概念中是最基本的,而且也比较简单.那么什么是设计模式呢?说的直白点,设计模式就是告诉你针对特定问题如何组织类.对象和接口之间的关系,是前人总结的经验.比如我要在代码中实现一个全局唯一的配置类,那么就使用Singleton模式.设计模式在实际编码工作和设计框架时会被使用到,而更高层的架构和平台则不会太关注它