您现在的位置是:首页 > 正文

云时代架构读后感(十二)

2024-01-30 21:02:16阅读 0

途牛订单的服务化演进

原文地址:

https://mp.weixin.qq.com/s?__biz=MzI3MzEzMDI1OQ==&mid=2651814702&idx=1&sn=cafc4aa95db9cfdbd0373d00c633a8fb&scene=21#wechat_redirect

 

一个系统无论视同开发还是运行时的资源,都无法满足业务的需求,服务化是我们架构演进的方向,不是为了服务化而去做服务化,是由业务发展的复杂度和发展的业务量驱动的架构进化,是为了满足更快速的支撑更大规模的更复杂业务规则的扩展性要求设计,所以,我们做第一步,垂直拆分

 

以上图形大致的描述旅游订单的概念模型,所以,随着业务的发展我们首先就把我们订单系统拆分成了会员、产品、资源、促销等等系统。

各系统通过WebService或者Rest等方式集成,以前最流行的SOA实施方式,看起来解决了业务发展过程中存在的一些问题。

业务类型较少的情况下解决了部分运行时资源紧张和故障隔离问题,代码拆分出来,项目构建影响小。就是松耦合,独立演进等等。

在只有一只手可以数的清楚的业务类型下,这种可以说基本上解决了我们一些问题,但是,我们的业务发展太速度了,每一种类型的订单,基本上都离不开这些领域的数据的交互,但是业务规则变化多样。

如果按照原来的思路,继续不断的增加一些类型判断如if...else...也能满足我们的要求,但是到最后可能就是 四五十个if else,而且相互影响,每个规则都相似又不同,所以其实大家发现了,其实这个时候订单的组装业务的规则已经成了现在的主要矛盾。

设计的问题,加一层就能解决很多问题,这个时候其实我们就需要吧我们的一些公共的服务(订单域)抽象出来,变化的规则通过具体的服务组装和编排去解决。

这个其实远了,我想说的就是,业务拆分,SOA能解决一部分问题,但是也有缺点,没有统一的管理,调用链不知谁依赖了谁,可靠性,可用性等的监控得不到保障,所以,这时候我们进入了 服务化的第二阶段,服务治理
通过合理的管理和监控,保证所有的调用有据可循,有序有章法。
这个时候需要 服务治理的基础设施,我们研发的服务治理框架就是来解决这个问题

服务消费者通用组件:根据配置下载指定服务的可用服务地址列表,并缓存在本地。响应服务地址列表变更通知,更新本地可用服务地址列表。提供到注册中心长连接的重连机制。

服务提供者通用组件:启动时根据注解自动扫描提供的服务详情,上传提供的服务地址列表到注册中心,内建了还有并发控制等功能,序列化是通用的jsong,http请求,主要是方便各系统的集成,还是由于业务的不断发展,需要不断拆分,对于一些系统故障,或者流量异常怎么办?

通过设计合理的调用日志,出入参,发起方落地房,调用序列号,时长等,将日志发送到ELK平台,实施监控一些异常信息,在异常信息中也去封装调用序列号,能够对部分小范围的单点的故障现场起到快速定位的作用。

发现所依赖的服务挂了,如何处理,有可能会吧把整个容器拖挂,我们在框架中集成了 Hystrix 组件,当挂住的线程超过了一定的数量则会快速返回,从而达到降级的效果。

看起来这些服务治理的问题都搞定了,接下来该怎么走。

如果你的业务复杂度不再增长了,但是业务量增长了,或许我们就要针对单一功能的容量和性能等可靠性要求进行设计,可能这时候进行弹性资源分配,或者分库分表等设计就要入场了。

总结:我们服务化的过程就是 拆分-》治理-》拆分,其实是一个不断迭代的过程,是随着业务发展和业务认知深度的发展而不断的拆分和治理的迭代。

 

转载于:https://www.cnblogs.com/wys-373/p/11014090.html

网站文章

  • 数字图像处理_傅里叶变换_输出矩阵的物理含义分析总结

    考虑二维傅里叶变换。傅里叶变换实现了将图像从空间域到频率域(也叫变换域)的转换,这种转换让我们得到了一个关于原图像灰度信息的频谱图,这个频谱图可以看做是图像梯度的分布图(图像梯度是两个点像素灰度的差值...

    2024-01-30 21:01:46
  • BZOJ2127Happiness

    题目描述高一一班的座位表是个n*m的矩阵,经过一个学期的相处,每个同学和前后左右相邻的同学互相成为了好朋友。这学期要分文理科了,每个同学对于选择文科与理科有着自己的喜悦值,而一对好朋友如果能同时选文科或者理科,那么他们又将收获一些喜悦值。作为计算机竞赛教练的scp大老板,想知道如何分配可以使得全班的喜悦值总和最大。题解这道题相当于给了我们一堆二元关系。容易想到用二元关系最小割来解决。我们设...

    2024-01-30 21:01:39
  • appsettings.json reloadOnChange事件处理

    appsettings.json reloadOnChange事件处理 写作一直是我比较头疼的事,从事10多年软件开发工作,基本上没写过什么文章,.net core的出现让我终于看到了.net平台的曙光,很希望广大.net开发者共同努力让.net core尽...

    2024-01-30 21:01:31
  • 【CCNP】第六章 流量控制 最新发布

    【CCNP】第六章 流量控制 最新发布

    R4(config)# access-list 1 permit 192.168.1.0 0.0.0.255 # 此处的permit不搭配接口下策略使用,不再是允许/放行的意思,而代表抓取。假设该公司...

    2024-01-30 21:01:03
  • 浙江省高校招生计算机类职业,浙江高校招生职业技能考试大纲:计算机类

    (三)数字媒体技术应用技能操作考试模块1.掌握Photoshop工具箱中常用工具的操作(1)能利用选区工具组绘制选区;(2)能利用选区编辑工具及命令进行选区的编辑;(3)能利用修复工具组和图章工具组进...

    2024-01-30 21:00:55
  • springcloud gateway分发服务报302,Network Error

    springcloud gateway分发服务报302,Network Error

    springcloud使用gateway分发服务,访问接口时一直报错:打开浏览器控制台一直提示302,然后转发到login;多次试验后发现是pom.xml文件中引入的secret依赖的问题,注释后重新...

    2024-01-30 21:00:47
  • A-color-image-encryption-technique-using-exclusive-OR-with-DNA-complementary-rules-based-on-chaos...

    A-color-image-encryption-technique-using-exclusive-OR-with-DNA-complementary-rules-based-on-chaos...

    【论文地址】A-color-image-encryption-technique-using-exclusive-OR-with-DNA-complementary-rules-based-on-ch...

    2024-01-30 21:00:18
  • Say Goodbye to OOM Crashes

    Say Goodbye to OOM Crashes

    内存管理---在计算机编程中,内存管理是一项关键任务,用于在程序运行时正确分配和释放内存。一个有效的内存管理系统可以帮助程序提高性能,减少内存泄露和访问错误等问题。内存管理涉及以下几个方面:1. 内存...

    2024-01-30 21:00:04
  • mybatis mysql的新增返回自增长id

    第一种方式: 表中主键没有定义自增长在实体类的映射文件 "*Mapper.xml" 这样写:<insert id="insertOrderReturnId" useGeneratedKeys="tru...

    2024-01-30 20:59:58
  • Embedding Layer理解

    参考 https://spaces.ac.cn/archives/4122 https://blog.csdn.net/jiangpeng59/article/details/77533309 https://www.cnblogs.com/bonelee/p/7904495.html https://blog.csdn.net/pipisorry/article/details/7609...

    2024-01-30 20:59:30