首页 > 其他分享 >微服务架构的新挑战

微服务架构的新挑战

时间:2023-03-15 16:59:04浏览次数:32  
标签:服务 运维 挑战 业务 间通信 架构 团队

《人月神话》中提到,软件世界没有“银弹”,这句话当然适用于架构领域

从网络、性能、运维成本、组织架构与集成测试五个方面分别进行阐述。

第一点,跨进程通信带来的新问题。

单体应用是在单机中进行进程内通信,通信稳定性相当好。但是打散为分布式系统后,变为进程间通信,往往这个过程还伴随着跨设备的网络访问

第二点,较高的响应延迟。

 相比传统单体架构进程内通信,跨进程、跨网络的微服务通信在网络传输与消息序列化带来的延迟是不可被忽略的

第三点,运维成本会直线上升

每一个服务都是可独立运行、独立部署、独立维护的业务单元,再加上互联网时代用户需求的不断变化以及市场的不稳定因素,运维人员每天面对成百上千台服务器发布几十次已是家常便饭,传统手动部署显然已经无法满足互联网的快速变化。

第四点,组织架构层面的调整。

 微服务不但是一种架构风格,同样也是一种软件组织模型,以往软件公司会以职能划分研发、测试、运维部门进行独立管理考核,而在微服务的实施过程中,是以业务模块进行团队划分,每一个团队是内聚的,要求可以独立完成从调研到发版的全流程,尽量减少对外界的依赖。如何将传统的职能团队调整为按业务划分的研发团队,同样是对管理者的巨大挑战,要知道人的思想比架构更难改变。

第五点,服务间的集成测试变得举步维艰

系统被拆解为很多独立运行的单元,服务间采用接口进行网络通信。要获取准确的测试结果,必须搭建完整的微服务环境,光这一项就需要花费大量的人力物力。同时,因为微服务是跨网络通信,网络延迟、超时、带宽、数据量等因素都将影响最终结果,测试结果易产生偏差。

 

微服务最佳实践

第一点,微服务的划分原则。

通常会从业务场景、团队能力、组织架构等多种因素综合考虑,这特别考验架构师的业务能力。

单一职责原则。

 每一个微服务只做好一件事,体现出“高内聚、低耦合”,尽量减少对外界环境的依赖。

服务依赖原则。

 避免服务间的循环引用,在设计时就要对服务进行分级,区分核心服务与非核心服务。

Two Pizza Team原则。

就是说让团队保持在两个比萨能让队员吃饱的小规模的概念。团队要小到让每个成员都能做出显著的贡献,并且相互依赖,有共同目标,以及统一的成功标准。一个微服务团队应涵盖从设计到发布运维的完整生命周期,使团队内部便可以解决大部分任务,从人数上4~6人是比较理想的规模。

第二点,为每一个微服务模块明确使命。

模板
XX 微服务用来
在出现痛点场景的情况下
解决现有的 XX 问题
从而达到了 XXX 的效果
体现了微服务的价值
示例
商品检索微服务用来
在商品数据全量多维度组合查询的情况下
解决了 MySQL 数据库全表扫描查询慢的问题
从而让查询响应降低到 50ms 以下
有效提升了用户体验

第三点,微服务确保独立的数据存储。

微服务架构下,因为数据库绝不允许其他团队访问,关联查询只能变为 API 调用形式,程序实现层面比单库复杂不少。

第四点,服务间通信优先采用聚合器模式。在微服务间通信时存在两种消息传递模式:链式模式与聚合器模式。

 

 采用聚合器模式后,业务流程与编排集中在“订单流程服务”中,可对整体业务进行有效编排,支付与扣库存可以并行调用,可以有效提高系统的性能。

第五点,不要强行“微服务”化。

架构是解决当前需求和痛点而演进的。在满足需要的前提下,选择合适的而不是选择最好的,合理降低成本才是好架构师该考虑的事情。

 

微服务架构的适用场景

新规划的大型业务系统

敏捷的小团队系统

历史的大型留存业务系统

 

标签:服务,运维,挑战,业务,间通信,架构,团队
From: https://www.cnblogs.com/jiaozg/p/17219102.html

相关文章

  • 记一次运气非常好的服务器渗透经历
    平平无奇的客服平台:这个客服平台是有RCE的,如果上传到的不是oss服务器,存储在本地服务器的话,在返回端口的url是存在st2。root权限,由于是客服后台服务器,没有啥有用价值......
  • 跟老杜从零入门MyBatis到架构思维(六)MyBatis核心配置文件-transactionManager
    MyBatis核心配置文件详解transactionManager配合视频教程观看,更易学习理解,课程讲解从Mybatis的一些核心要点与实战中的运用,一直过渡到MyBaits源码,由表及里的代入架构思维。......
  • VC MFC 使用 soap方式与web服务器交互
    首先安装MicrosoftSOAPToolkit3.0  soapsdk.exe链接:https://pan.baidu.com/s/15NeiuXQm4Wnvjvd8ngPwsA提取码:l8yh  包含头,引用库,命名空间#import"msxml6.d......
  • 从架构的演变看微服务化架构
    微服务架构风格是一种将单机应用程序开发为一组小型服务的方法,每个小服务运行在自己的进程中,并以轻量级的机制来进行通信。这些服务围绕着业务能力所建立,并且由完全自动化......
  • 【HarmonyOS】FA服务卡片中如何给List添加消息事件
    ​ 【关键字】消息事件、JSUI、服务卡片 【介绍】HarmonyOS使用JSUI进行Java服务卡片开发大家一定不陌生,如果还有没有接触过服务卡片开发的可以参考以下文档:http......
  • 这是一篇纯讲SQL语句优化的文章!!!| 博学谷狂野架构师
    insert如果我们需要一次性往数据库表中插入多条记录,可以从以下三个方面进行优化。insertintotb_testvalues(1,'tom');insertintotb_testvalues(2,'cat');inse......
  • 前端架构工作
    工作中所涉及到的工作,也有一些PM的工作,比如:协调人员、拆分任务并分配给相关人员,把控工作进度、评审、变更管理等等。项目立项,资源申请(服务器资源、人员)需求评审(业......
  • SpringCloud微服务实战——搭建企业级开发框架(五十一):微服务安全加固—自定义Gateway拦
      SQL注入是常见的系统安全问题之一,用户通过特定方式向系统发送SQL脚本,可直接自定义操作系统数据库,如果系统没有对SQL注入进行拦截,那么用户甚至可以直接对数据库进行增删......
  • MySQL 服务无法启动解决
    MySQL服务无法启动服务没有报告任何错误解决启动MySQL服务遇到问题:可能是3306端口被占用解决方案:查询占用3306端口号的进程netstat-ano|findstr"3306"查询......
  • linux服务器检查脚本
    直接上脚本该脚本并不能检测出服务器有什么性能问题,或者安全问题,只是简单的展示检查结果,至于服务器是否有什么问题,还需要执行者自行根据结果去分析,判断。具体内容,如下,有详细......