导航:首页 > 源码编译 > 分布式核心源码教程

分布式核心源码教程

发布时间:2022-12-14 20:11:58

㈠ 什么是分布式

分布式也就是微服务中的一种体系结构,那么提到分布式、就要先说说单机和集群
一、单机结构
单机就是所有业务全部写在一个项目中,部署服务到一台服务器上,所有请求业务都由这台服务器处理,显示,当业务增长到一定程度的时候,服务器的硬件会无法满足业务需求,自然而然的想到一个程序步行就部署多个。
二、集群
集群就是单机的多实例,在多个服务器上部署多个服务,每个服务就是一个节点,部署N个节点,处理业务的能力就提升N倍,这些节点的结合就叫做集群。
负载均衡:协调群里的每个节点均衡地接收业务请求。通俗的讲就是服务A和服务B相同时间段内处理的同类业务请求数量是相似的
集群的特点:
扩展性好:集群只是单机的多个复制,没有改变单机的原有的代码结构,每次部署新节点只需要复制部署即可。
单个节点业务耦合度高、资源浪费:节点是多个业务处理集合(耦合度高),每个具体业务的访问量可能差异很大,比如JD上账户管理模块的访问量肯定低于订单模块。
然而账户管理模块和订单模块的部署数量是一样的(因为每个节点里独有这两个模块),相对于订单模块来说,部署同样多的账户管理模块就是浪费。
那就把单机节点不同的业务处理模块拆开,这就是分布式了。
三、分布式(微服务)
分布式结构就是一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在Web容器中,他们之间通过RPC方式通信。
举个例子,假如需要开发一个在线商城。按照微服务的思想,我们需要按照功能模块拆分成多个独立的服务,如:用户服务、产品服务、订单服务、后台管理服务、数据分析服务等。
这一个个服务都是一个个独立的项目,可以独立运行。如果服务之间有依赖关系,那么通过RPC方式调用。
分布式的优点:
系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当于容易,开发效率大大提升。
系统之间的耦合性降低,从而系统更易于扩展,我们可以针对性地扩展某些服务,就是对子系统集群。例如:双十一时,订单子系统、支持子系统需要集群,账号管理子系统不需要集群。
服务的复用性更高,比如:我们将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发。
四、分布式与集群的区别
将一套系统拆分成不同子系统部署在不同服务器上(这叫分布式)
署多个相同的子系统在不同的服务器上(这叫集群)
部署在不同服务器上的同一个子系统应做负载均衡。
分布式:一个业务拆分为多个子业务,部署在多个服务器上 。
集群:同一个业务,部署在多个服务器上 。

㈡ 分布式事务解决方案ServiceComb - Omega源码阅读与分享

ServiceComb已经是Apache的顶级项目,包含两个组件,即 alpha 和 omega。

源码地址:https://github.com/apache/servicecomb-pack

alpha 是事务协调中心,保存事务日志,通过日志协调各个分支

demo 里面项目的各框架的例子:spring和bbo saga tcc

docs 设计文档,最先应该熟悉的。

omega 负责与alpha通讯,子事务逻辑

pack-contracts gRPC通讯接口定义文件,通过中间文件生成客户端与服务端面代码,让开发者不必关心通讯过程

web 用angular写的web界面,可以查看事务的状态。

我们主要关注的alpha和omega的代码,gRPC知识是通讯基础非常重要,最好先了解gRPC和probuf、Kyro序列化对阅读源码

还是很有帮助的。但通讯部分只是简单带过。

GlobalTxId全局事务ID标记子事务是否同属性一个事务中

ParentTxId 父类的事务ID

localTxId子事务Id

Omega会面向切面编程的方式,向程序中注入相应的逻辑,初始化事务上下文OmegaContext,在事务处理的过程中向alpha报告事务状态,

实现saga协调协议和TCC协调协议,下面就是omega客户端要配置了三个信息

omega.enable=true或@EnableOmega的作用只标记开启Omega,Omega在SpringBoot上初始化过程:

OmegaSpringAutoConfiguration 通过@Configuration,在Spring框架启动时加载并配置

OmegaSpringConfig

作用:初始化各Bean,IdGenerator用来生成子事务Id Saga的事件Sender Tcc事件Sender回调CallbackContext

TransactionAspectConfig

对@SagaStart @Compensable注解AOP的切面编程对象初始

Omega内部机制:SagaStartAspect @SagaStart的AOP切面编程

TransactionAspect对@Compensable注解AOP切面编程

成功场景下,每个事务都会有开始和对应的结束事件。

TransactionAspect=>DefaultRecovery=>CompensableInterceptor

封装了通讯组件:bbo fegin resttemplate servicecomb实现的通讯

这些组件各自通讯的基础上,在服务之间相互调用时,把globalTxId和localTxId传递过去,并注入Context中

如:omega-transport->omega-transport-resttemplate

RestTemplateConfig 配置拦截器

:把当前的上下文的globalTxId和localTxId放到请求里

TransactionHandlerInterceptor 服务提供者,把resttemplate传递过来的globalTxId和localTxId放到当前上下文里,

pack-contracts->pack-contract-grpc

gRPC的接口服务定义文件:GrpcCommon.proto GrpcTccEvent.protogrpcTxEvent.proto:这些文件在protobuf命令直接编译java代码。

如何使用请看:proto文件gRpc基础

谢谢能看到最后的人:我分享我是怎么阅读源码的。源码阅读不能一上来就找到main入口一行一行的看。最先应该了解基本的组成架构、和用到了哪些技术栈,如果还用了你从来没见的技术,建议先去学习这门新的技术,再回头来看代码,熟悉了各模块相对应的功能后。我会找到一个切入口,猜一下它的实现方式,再根据猜测,带着疑问,去找答案。如果对整个项目的模块不是很清楚,最好先把源码里的Demo正常的运行。通过这样的简单学习,一步步的深入。有的代码的抽象是比较复杂的。可先跳过,当你对整个结构都非常了解了,这时再回头去读剩下的难点。最后有个总结有个对比就是最好结果。

阅读全文

与分布式核心源码教程相关的资料

热点内容
正宗溯源码大燕条一克一般多少钱 浏览:913
电脑感染exe文件夹 浏览:914
wpsppt怎么转pdf格式 浏览:86
腾讯文档在线编辑怎么添加密码 浏览:868
本地不能访问服务器地址 浏览:865
访问服务器命令 浏览:835
华为云服务器分销商 浏览:954
Linux定位内存泄露 浏览:198
工程加密狗视频 浏览:720
不在内网怎么连接服务器 浏览:664
云服务器app安卓下载 浏览:966
如何查看linux服务器的核心数 浏览:137
交易平台小程序源码下载 浏览:148
程序员记笔记用什么app免费的 浏览:646
java与单片机 浏览:897
服务器内网如何通过公网映射 浏览:478
程序员穿越到宋代 浏览:624
怎么使用云服务器挂游戏 浏览:618
真实的幸福pdf 浏览:345
d盘php调用c盘的mysql 浏览:266