如今的各大互联网公司都在推崇使用分布式系统架构,国外的 Google 和国内的 BAT 等大型 IT 公司也都将分布式系统用到了极致。分布式系统最大的特点是廉价高效,由成本低廉的 PC 服务器组成的集群,在性能方面能够达到或超越大型机的处理性能,在成本上远低于大型机。这也是分布式系统吸引企业客户的关键地方。
但是,在分布式系统中,业务分布式处理一旦有共享资源,就会涉及共享资源的访问问题,不论是采用集中式处理方式,还是锁的方式,都对并发带来较大的影响,如何解决这些问题?同时,在可扩展的分布式系统下,随着系统的逐渐扩容,系统业务的并发增大,对 DB 读写要求越来越高,但 DB 本身性能有限,在这种场景下,如何考虑 DB 性能的扩展?
为此,我们特别策划了架构师闭门会“分布式系统”话题交流活动。
我们邀请了在分布式系统研发、应用和推广的厂商及技术专家们,一起讨论彼此真正关心的问题,了解双方的需求和规划。在本次闭门会议上,大家抛出问题、探讨方法,一同交流心得、分享经验。
在分布式中共享资源时如何保证事物的性能?
在实际业务中,很多事物要对当前的数据进行处理,比如为了整个事物的一致性会压损数据,在这个情况下如何对业务做一个取舍或者提高性能?有些公司的数据只在一个地方放着,数据是分开写的,会写两份提高性能,写的时候是一个离境的处理。在放数据的地方加锁,两边最终一致,不是两边同时提交和修改。关于锁,这里遇到一个问题,那就是在改代码锁的时候,性能下降非常大,即使有多个节点,性能下降很厉害。如何解决这个问题呢?
讨论过程中,有专家给出解决方法,整理如下:
- 原子操作,尽量小原子化
- 给资源池加锁,避免分配不均匀
- 根据具体的业务需求,对分布式系统进行设计
- 转换成队列的方式处理
- 业务上避免解锁,锁跟高键位是冲突的,必须要找到一个平衡
分布结点的数据一致性如何保证?
同城同步和异地同步的业务选择上,大家能保证哪个程度的一致性呢?这里以某电商为例,电商的多中心是以数据库为中心来划分的,在 A 处的用户只有通过 IOS 直接到内存,所有的数据在这里有一个完整的映射。另外有一种做法就是数据双写,有的是多写,有的是单写。
- 把用户 ID 用一个数据中心也可以,上海一个数据中心,北京一个,每一个城市都有 IDC,这就是一个再平衡的过程。就这里出现为什么不用分布式数据库的问题了,这样可以节省很多流程,因为数据是有地域属性的。
- 通过 shading 的方式,把业务之间的数据隔离规整到一块来管理。
一次性的过程中如何构件多连接的日志并且进行分析?
在某些场景下经常出现分配一条任务要占很多个模块,部署在不同的机器上会出现很多问题,没有日志管理和处理的方式,那么如何选取较好的系统来定位问题?
- 在多个结算节点上处理之后,异步处理。
- 标记一个 ID,快速定位这个 ID 出现了哪些问题。
- 关于日志收集,完全自动化很难,部分自动化可以,把那些最常见的错误把它尽量自动化。
- 分布式系统里要做到 ID 一致,就要加上本地时间,加上不同的时间序列。
树型数据库在业界是否有应用,什么样的数据访问特点适合树型数据库?
- 对于通讯领域,定义了好多标准,用一个树来描述整个配制下发的数据,而使关系型数据转为二维表很麻烦,有没有一个很好的接口高效对接而不用拆表呢?
- 通过增加层级来产生循环链达到自我控制。
- 不断的增加层级,用一个 K 关联。
- 使用一个树型结构 ETCB 存储,不过得自己拆开。
一般使用的集群技术是什么?如何解决脑裂问题?
- 在采集 EDN 过程中要解决一个集群中达成数据一致实现起来很简单,包括 EBCD。目前一些 TAV 也是这么做的,可以解决一个集群中数据同步,可以保证数据的强一致。如果中间有一个集群跟其他集群隔离,可以保证这个数据是正确的。
- 一般的应用只要一个业务的多实力,通过通讯的负载均衡达到集群的效果,如果需要有一致性的数据时候再用 ZooKeper 来做。有的团队为了屏蔽底层数据的通用性,直接用 akka 的集群建立一个系统维护起来,同步自己集群状态信息。
- 其他简单的方法就用一个 ZooKeper,自发现跟 Elasticsearch 一样,这种情况等于它内部实现了一个 EBC。这和 ZooKeper 防脑裂一样,需要有一个结点配制,小这个结点不能选取,小数点不可用,不能同时出现两个活着的集群。
微服务架构使用情况,服务之间的接口有哪些方式?
- TCP
- STP 协议
- ETC
- VP1,VP2,VP3,有兼容
『架构师俱乐部』是国际知名技术社区 InfoQ 发起和主办的,以资深架构师为主的不定期技术交流活动,旨在通过及时的分享和深入的交流,在资深技术人员之间搭建一个平台,让彼此之间的信息无障碍流通,同时增加彼此识朋交友的机会。
评论