多点生活的分布式服务框架DSF(上)

简介: 编者按:J2EE异军突起之时,那些2层架构(web+后端)的人必定是崩溃的;而后spring以without ejb革命了,现在spring已渐成全家桶之势。SOA概念兴起之时,ESB相关的厂商大赚,而今老马又携微服务而来,受益者包括企业软件厂商,各云平台厂商等,眼花缭乱渐迷眼,各领风骚好几年!多点生活架构师陈泽洪本着【少谈些概念、多解决问题】的原则给我们分享他们用几个月完成的这一套分布式服务框架。近期中生代社群由ppmoney敖小剑同学分享的微服务架构非常干货,几近跨省追杀;本文同样是这样的干货,很干...选择开源产品的时候,需要根据自己的实际情况,做必要的改造才能打造出真正适合自己

 

背景


多点生活成立于2015年初,1亿美元天使轮,和物美超市深度合作,目标是打造线上线下一体化的全渠道零售平台。技术研发团队基本上全  在成都,在成都JAVA好招人,所以基本上在多点内部就是JAVA一统天下了,也没有去考虑其他的语言了。10几个人,2个月时间,上线了第一版的业务系统,麻雀虽小五脏俱全,从APPH5,从商品到购物车,从订单到交易,从会员到配送履约,十几个系统。为了快速开发,全部基于REST API,通过一个叫API Center的中心服务进行中转服务调用。


微信图片_20220121144952.jpg


1、早期的API Center

 

随着业务量的增长,3个月时间用户量就超过200万,业务系统不断增加,服务之间的调用变得越来越复杂,没有谁能完全理清楚服务之间的关系了。同时APICenter慢慢成为瓶颈,也占用了我们不少服务器资源,作为创业公司,还是要精打细算的。而且APICenter作为服务中心路由节点,所有的服务调用都走这里通过。有一次,我们的一个工程师出了一个bug,在一个死循环中不停调用某个服务,直接把APICenter搞挂了,所有服务都不能提供服务,只能简单粗暴重启服务或干掉问题服务。


微信图片_20220121145008.jpg


2、业务发展一年后的全景图

 

创业公司,时间宝贵,拿来主义

为了解决上面的问题,迫切要有一套分布式服务框架来解决这些问题,由于时间紧,人手有限,从头开发一个肯定是来不及了。所以我们本着拿来主义的原则选择了一个开源的框架来用,那就是dubbo。虽然dubbo并不是市面上最好、最新的服务框架,但是我们很多人对dubbo都很熟悉,使用成本低,于是就选择了它,本身我们只需要支持JAVA语言就够了。

 

先做减法,再做加法

dubbo相对来说是一个很老的框架了,功能很庞杂,有很多我们用不上的东西,同时有很多我们想要的功能却没有。于是我们第一步先做减法:精简内核,去掉所有不要的功能,干掉了差不多一半的功能;第二步:调整策略,修改测试发现的bug;第三步:添加我们必要的功能。2个人,1个月时间,就基本上改造完成了符合我们预期的分布式服务化框架。


微信图片_20220121145045.jpg


3、多点服务化框架DSF


核心功能点:

1RPC [保持不变]

这块基本上没有做什么调整,直接沿用dubbo基于netty的长连接的传输,hessian的序列化,在满足我们的业务调用量的前提下,不引入更多的依赖,保持简单就好。

 

2、服务注册和发现 [改进]

我们是基于Zookeeper来做服务注册与发现,也没有什么大的问题,而且几乎是现成的解决方案,不需要开发什么代码。随着我们开始多机房(混合云)部署,就创建了一个大的ZK集群,不同机房的应用优先连本地的ZK节点,优先调用本地机房的服务,当本地机房的服务不可用的时候,自动跨专线调用另外机房的服务。

这些功能本身dubbo并没有提供,需要我们代码来实现。但是由此带来了不少的运维复杂度,我们需要针对不同机房的应用部署打包配置不同的参数,以适应优先本地机房配置。于是我们就开发了我们自己的配置中心(Admiral),可以用同一个打包部署文件,自动适配不同机房不同的参数来达到本地机房优先的原则。


微信图片_20220121145226.jpg


4、优先注册和调用本地服务


微信图片_20220121145241.jpg


5、基于配置中心,自动获取配置参数

相关文章
|
29天前
|
监控 负载均衡 Cloud Native
ZooKeeper分布式协调服务详解:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入剖析ZooKeeper分布式协调服务原理,涵盖核心概念如Server、Client、ZNode、ACL、Watcher,以及ZAB协议在一致性、会话管理、Leader选举中的作用。讨论ZooKeeper数据模型、操作、会话管理、集群部署与管理、性能调优和监控。同时,文章探讨了ZooKeeper在分布式锁、队列、服务注册与发现等场景的应用,并在面试方面分析了与其它服务的区别、实战挑战及解决方案。附带Java客户端实现分布式锁的代码示例,助力提升面试表现。
123 2
|
1月前
|
存储 人工智能 PyTorch
基于PyTorch/XLA的高效分布式训练框架
基于PyTorch/XLA的高效分布式训练框架
35 2
|
2月前
|
消息中间件 算法 Java
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
【亿级数据专题】「分布式服务框架」 盘点本年度我们探索服务的保障容量的三大关键方案实现
189 0
|
1月前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
76 2
|
5天前
|
存储 大数据 Apache
深入理解ZooKeeper:分布式协调服务的核心与实践
【5月更文挑战第7天】ZooKeeper是Apache的分布式协调服务,确保大规模分布式系统中的数据一致性与高可用性。其特点包括强一致性、高可用性、可靠性、顺序性和实时性。使用ZooKeeper涉及安装配置、启动服务、客户端连接及执行操作。实际应用中,面临性能瓶颈、不可伸缩性和单点故障等问题,可通过水平扩展、集成其他服务和多集群备份来解决。理解ZooKeeper原理和实践,有助于构建高效分布式系统。
|
5天前
|
分布式计算 Java Go
Golang深入浅出之-Go语言中的分布式计算框架Apache Beam
【5月更文挑战第6天】Apache Beam是一个统一的编程模型,适用于批处理和流处理,主要支持Java和Python,但也提供实验性的Go SDK。Go SDK的基本概念包括`PTransform`、`PCollection`和`Pipeline`。在使用中,需注意类型转换、窗口和触发器配置、资源管理和错误处理。尽管Go SDK文档有限,生态系统尚不成熟,且性能可能不高,但它仍为分布式计算提供了可移植的解决方案。通过理解和掌握Beam模型,开发者能编写高效的数据处理程序。
134 1
|
11天前
|
编解码 NoSQL Java
Springboot框架使用redisson实现分布式锁
Redisson是官方推荐的Java Redis客户端,提供丰富的功能,包括默认的分布式锁支持。它可以无缝替代Spring Boot 2.x的Letture客户端,不影响原有RedisTemplate和Redis Repository的使用。集成包括spring-boot-starter-data-redis和redisson-spring-boot-starter,后者需排除默认的redisson-spring-data-23以匹配Spring Data Redis v.2.2.x。
|
16天前
使用JWT的服务分布式部署之后报错:JWT Check Failure:
使用JWT的服务分布式部署之后报错:JWT Check Failure:
24 1
|
17天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
1月前
|
分布式计算 监控 Hadoop
Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】Hadoop【基础知识 02】【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
58 0