从微服务划分,微服务之间通信到程序员能力提高的一些思考

  这个问题是由工作中的一次需求的变动引起的。

1:为什么会有这个思考

  我们当前做的是一个视频门户系统,这个系统分为四个子系统:cms(内容系统),bms(订购系统),tms(终端管理系统),ims(用户系统)。这四个系统对应同名的四个数据库,分别记录相关的数据。

  问题出现在一次需求变动后,我们要用各地的CDN播放地址替换源播放地址,所以我们要对业务做一下小小的改动。但是在改动的过程中发现,ims的一些业务功能也用到了播放地址,所以不仅cms要改动,ims也要改动。这样的话改动的地方就比较多,比较大了。

2:存在这个问题的原因

  为什么会出现这个问题呢?最初我们在设计这个系统的时候,数据库的划分还是比较明确的。但是在业务划分方面,由于没有经验,导致业务模块的边界划分的不够清晰。而且在后期的系统构建过程中,为了图方便,用到其它系统的数据的地方就直接引用其它系统的数据库了。这些原因就导致了要修改一个功能,却要修改多个项目的多个地方的问题。

3:关于这个问题的思考

  出现这个问题首先是因为设计之初没能深入透彻的明白业务需求,导致业务划分,特别是业务边界的划分不够明确,导致我们关于某个功能的实现可能同时出现在多个系统中。

  然后就是业务划分的粒度不够细,因为粒度划分的越细,越容易实现模块间的解耦,模块间的复用。而不用因为一个问题的出现到处去修改。

  还有就是对于某个模块或某个功能,对外暴露出来的供外部使用或调用的接口一定要是唯一的,这样如果业务改变我们只用修改这个接口的内部实现就行了。例如:对于一个数据表的操作,如果四个子系统都有一定的实现,那么当数据库表有改动时,四个子系统都要改动。如果只有一个子系统实现了这个数据库的操作,别的子系统都是通过调用这个子系统暴露的接口来对数据库进行操作的话,这个问题就变得很简单了。

4:后记

  当然,任何复杂的系统都不是一蹴而就的,都是由一些简单的甚至不合理的系统慢慢进化而来的。在设计之初,我们也不可能将系统架构的十全十美。在这种情况下,我们一定要擦亮眼睛,因为一切让我们感觉到复杂甚至不合理的地方都是我们进一步优化的入口。我们一定要保持思维的敏感与洁癖,因为你对问题的将就和习惯可能会使你的技术与能力止步不前。

时间: 2024-11-03 22:18:31

从微服务划分,微服务之间通信到程序员能力提高的一些思考的相关文章

微服务划分的姿势

原文:微服务划分的姿势 我们知道微服务是一种理念,没有确切的定义和边界,好比设计原则,是属于抽象的概念.在定义不明确的情况下谈划分也是一种各说各话,具体问题需要具体分析,所以这篇文章谈到的划分也不是绝对标准,仅供参考. 有人说微幅不难,难的是服务的划分,虽然我持保留意见.但是从侧面也反应了划分具有一定的困难.这里的矛盾在于粒度.如果粒度太大了,分和不分似乎都差不多:如果粒度太小了,聚合.发布.调用链.调试等都是坑. 以下谈到的拆分是前人经验的总结,我罗列了三种行家的拆分姿势,每个的的经验和视野不

面向服务与微服务架构

背景 最近阅读了 Martin Fowler 和 James Lewis 合著的一篇文章 Microservices, 文中主要描述和探讨了最近流行起来的一种服务架构模式--微服务,和我最近几年工作的实践比较相关感觉深受启发.本文吸收了部分原文观点,结合自身实践经验来探讨下服务架构模式的演化. 面向服务架构(SOA) 面向服务架构 SOA 思想概念的提出已不是什么新鲜事,大概在10年前就有不少相关书籍介绍过.当时 java 企业应用领域 J2EE 依然是主流,应用程序被部署在庞大统一的符合 J2

通过Springboot拆分服务构建微服务集

上个月(16/07)把一个大而全的应用拆分成一个个小的应用. 应用背景: 1.基于Spring Boot开发 2.依赖ActiveMQ,Kafka,Redis,Mongodb,MySQL等开源软件 3.内部服务图片服务器,分布式计算平台服务,检索服务,消息推送服务等 拆分原因: 1.(原有的)应用模块之间高度耦合,各个模块都担当了牵一发而动全身的"角色" 2.应用的配置信息分布到依赖个几个服务的配置中,配置信息冗余,对配置的修改改动地方过多 3.应用在依赖的基础服务的时候,没能遵循&q

应用量化时代 | 微服务架构的服务治理之路

技术随业务而生,业务载技术而行. 近些年来,伴随数字经济的发展,在众多企业的数字化转型之路上,云原生.DevOps.微服务.服务治理等成为行业内不断被探讨的新话题.人们在理解和接受这些新型概念的同时,也不断地思考其可能的落地形态.需求是创造发生的原动力,于是一批代表性的开源技术或者框架涌现而出:Kubernetes,Spring Cloud,Service Mesh,Serverless-- 它们炙手可热,大放异彩.然而在具体落地过程中却步履维艰,磕磕绊绊. 本文试图结合企业业务的核心诉求,以应

Java程序员必知——基于微服务的软件架构模式

微服务(micro services)这个概念不是新概念,很多公司已经在实践了,例如亚马逊.Google.FaceBook,Alibaba.微服务架构模式 (Microservices Architecture Pattern)的目的是将大型的.复杂的.长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易得局部改良. Micro这个词意味着每个服务都应该足够小,但是,这里的小不能用代码量来比较,而应该是从业务逻辑上比较--符合SRP原则的才叫微服务. 暂且不讨论大小问题,读者朋友你首

程序员修神之路--为什么有了SOA,我们还用微服务?

菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做 那挺好呀,微服务现在的确很流行 我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀 的确,微服务和SOA有相同之处 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互.它是一种设计方法,其中包

微服务与微服务架构

微服务: 强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用 狭义的看,可以看做是Eclipse里面的一个个微服务工程/或者Module 强调的是一个一个的个体,每个个体完成一个具体的任务或者功能. 微服务架构: 是一种架构模式,它提倡将单一的应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值. 每个服务运行在单独的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API). 每个服务都围绕

微服务SpringCloud之服务网关zuul一

前面学习了Eureka.Feign.Hystrix.Config,本篇来学习下API网关zuul.在微服务架构中,后端服务往往不直接开放给调用端,而是通过一个API网关根据请求的url,路由到相应的服务.当添加API网关后,在第三方调用端和服务提供方之间就创建了一面墙,这面墙直接与调用方通信进行权限控制,后将请求均衡分发给后台服务端. 为什么需要API Gateway 1.简化客户端调用复杂度 在微服务架构模式下后端服务的实例数一般是动态的,对于客户端而言很难发现动态改变的服务实例的访问地址信息

微服务与单体服务

什么是微服务? 微服务是一种系统架构的设计风格,主旨是将原本复杂的系统拆分成多个独立的小型服务,每个服务维护自身的业务逻辑.数据处理及部署,服务与服务之间通过简单的通信协议进行通信(比如restful API),不要求每个微服务使用同一种编程语言编写. 微服务优缺点? 可参考 https://blog.csdn.net/Leon_cx/article/details/81487547 优点归纳为以下几点: 缺点: - 运维层面上,运维需要维护的服务更多了- 问题难定位,单体项目日志集中在一起,出