运城达内培训分布式开发基础组件包含哪些


[日期:2021-09-16 06:07]   来源:    阅读:

我们在前几期的文章中给大家简单介绍了分布式系统开发的一些基础知识等内容,而本文我们就继续来学习一下,分布式开发基础组件包含哪些。

运城达内培训分布式开发基础组件包含哪些

通信组件

通信组件用于业务系统内部服务之间的调用,在大并发的电商平台中,需要满足高并发高吞吐量的要求。

整个通信组件包括客户端和服务端两部分。

客户端和服务器端维护的是长连接,可以减少每次请求建立连接的开销,在客户端对于每个服务器定义一个连接池,初始化连接后,可以并发连接服务端进行RPC操作,连接池中的长连接需要心跳维护,设置请求超时时间。

对于长连接的维护过程可以分两个阶段,一个是发送请求过程,另外一个是接收响应过程。

发送请求时,若发生IOException,则把该连接标记失效。

接收响应时,服务端返回SocketTimeoutException,如果设置了超时时间,那么就直接返回异常,清除当前连接中那些超时的请求。否则继续发送心跳包(因为可能是丢包,超过pingInterval间隔时间就发送ping操作)

若ping不通(发送IOException),则说明当前连接是有问题的,那么就把当前连接标记成已经失效;

若ping通,则说明当前连接是可靠的,继续进行读操作。失效的连接会从连接池中清除掉。

每个连接对于接收响应来说都以单独的线程运行,客户端可以通过同步(wait,notify)方式或者异步进行rpc调用,序列化采用更高效的hession序列化方式。

服务端采用事件驱动的NIO的MINA框架/Netty框架,支撑高并发高吞吐量的请求。

路由Router

在大多数的数据库切分解决方案中,为了提高数据库的吞吐量,先是对不同的表进行垂直切分到不同的数据库中,然后当数据库中一个表超过一定大小时,需要对该表进行水平切分,这里也是一样,这里以用户表为例,对于访问数据库客户端来讲,需要根据用户的ID,定位到需要访问的数据;

数据切分算法

根据用户的ID做hash操作,一致性Hash,这种方式存在失效数据的迁移问题,迁移时间内服务不可用,维护路由表,路由表中存储用户和sharding的映射关系,sharding分为leader和replica,分别负责写和读。

这样每个biz客户端都需要保持所有sharding的连接池,这样有个缺点是会产生全连接的问题;

解决方法是sharding的切分提到业务服务层进行,每个业务节点只维护一个shard的连接即可。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。


友情链接: