什么是微服务架构呢?简单说就是将一个完整的应用(单体应用)按照一定的拆分规则(后文讲述)拆分成多个不同的服务,每个服务都能独立地进行开发、部署、扩展。服务于服务之间通过注入RESTful api或其他方式调用
微服务的目的在于有效的拆分应用, 以实现敏捷开发和部署
微服务的不足
1、多服务部署运维难度
2、服务间通信成本
3、数据一致性
4、系统集成测试
5、性能监控
好处:
1、功能特定, 一个微服务完成 一个特定的功能
2、复杂度可控, 将应用合理分解,避免复杂度无止境的积累
3、可以进行独立部署, 降低生产环境部署时对整个系统的运营风险
4、容错, 当一组应用发生错误时,在合理的设计下, 其不会影响其他应用的使用
5、扩展, 单块应用也可以实现横向扩展, 可以根据应用需求独立进行扩展
拆分原则:
不好的实践
- 以代码量作为衡量标准,例如500行以内。
- 拆分的粒度越小越好,例如以单个资源的操作粒度为划分原则。
建议的原则
- 功能完整性、职责单一性。
- 粒度适中,团队可接受。
- 迭代演进,非一蹴而就。
- API的版本兼容性优先考虑。
代码量多少不能作为衡量微服务划分是否合理的原则,因为我们知道同样一个服务,功能本身的复杂性不同,代码量也不同。还有一点需要重点强调,在项目刚开始的时候,不要期望微服务的划分一蹴而就。
微服务架构的演进,应该是一个循序渐进的过程。在一个公司、一个项目组,它也需要一个循序渐进的演进过程。一开始划不好,没有关系。当演进到一个阶段时,微服务的部署、测试和运维等成本都非常低的时候,这对于你的团队来说就是一个好的微服务。
微服务架构的开发原则
微服务的开发还会面临依赖滞后的问题。例如:A要做一个身份证号码校验,依赖服务提供者B。由于B把身份证号码校验服务的开发优先级排的比较低,无法满足A的交付时间点。A会面临要么等待,要么自己实现一个身份证号码校验功能。
以前单体架构的时候,大家需要什么,往往喜欢自己写什么,这其实是没有太严重的依赖问题。但是到了微服务时代,微服务是一个团队或者一个小组提供的,这个时候一定没有办法在某一个时刻同时把所有的服务都提供出来,“需求实现滞后”是必然存在的。
一个好的实践策略就是接口先行,语言中立,服务提供者和消费者解耦,并行开发,提升产能。无论有多少个服务,首先需要把接口识别和定义出来,然后双方基于接口进行契约驱动开发,利用Mock服务提供者和消费者,互相解耦,并行开发,实现依赖解耦。
采用契约驱动开发,如果需求不稳定或者经常变化,就会面临一个接口契约频繁变更的问题。对于服务提供者,不能因为担心接口变更而迟迟不对外提供接口,对于消费者要拥抱变更,而不是抱怨和抵触。要解决这个问题,一种比较好的实践就是管理 + 技术双管齐下:
- 允许接口变更,但是对变更的频度要做严格管控。
- 提供全在线的API文档服务(例如Swagger UI),将离线的API文档转成全在线、互动式的API文档服务。
- API变更的主动通知机制,要让所有消费该API的消费者能够及时感知到API的变更。
- 契约驱动测试,用于对兼容性做回归测试。
服务化架构演进历史
微服务(Microservice)那点事
http://www.importnew.com/17588.html
深度剖析微服务架构的九大特征
http://developer.51cto.com/art/201608/516401.htm
相关推荐
在微服务架构中,DDD可以帮助我们更好地拆分服务,确保每个服务都专注于其核心业务能力,从而实现高内聚和低耦合。 微服务架构是一种将大型应用程序分解为一组小型、独立的服务的架构风格。每个服务都可以在其自己...
服务颗粒化指的是服务可以被拆分成足够小的部分,通常可以通过子系统、业务模块或API进行切分。责任单一化意味着每个服务只负责执行一个具体的业务功能。运行隔离化确保了服务的独立性,使得服务之间互不干扰,更...
微服务通过服务切分来提高系统的可维护性和灵活性,但同时也带来了分布式事务等新的问题。 课程进一步深入到微服务的核心基础知识,包括了服务网关、服务发现与注册、配置中心、链路追踪、负载均衡器和熔断等。这些...
3. **数据分库分表**:根据业务场景进行数据模型重构,实现数据的水平或垂直切分。 4. **持续集成/持续部署(CI/CD)**:建立自动化测试、构建和部署流程,确保服务的质量和稳定性。 5. **灰度发布**:采用灰度发布...
Single Responsibility(单一责任)原则强调了单一职责,切分的粒度要把握好。这个原则的目的是为了提高系统的可维护性和可扩展性。在实际应用中,Single Responsibility原则可以通过使用微服务架构和单一职责的设计...
2. **数据库设计**:从提供的文件名来看,如`hm-item.sql`、`hm-trade.sql`、`hm-user.sql`、`hm-pay.sql`等,我们可以推测项目中包含多个数据库,每个服务可能对应一个或多个数据库,实现数据的垂直切分。...
业务理解和切分是确定服务粒度的关键,可以通过分析业务流程和参照业界最佳实践来完成。 在实际操作中,服务的拆分可能会遇到数据库共享与独立的问题。共享数据库简化了跨服务的数据访问,但可能导致数据一致性问题...
以下是对"根据业务切分微服务边界步骤"的详细解释: 1. **梳理业务流程**: 在开始切分微服务之前,首先需要对整个业务流程有深入的理解。这包括识别关键业务流程、工作流、业务实体以及它们之间的相互作用。通过...
- 这种策略还包括对数据进行水平或垂直切分,以实现更好的扩展性和并发处理能力。 4. **多源数据适配**: - 在实际应用场景中,数据往往来自不同的源头。这就需要建立一套统一的数据接入机制,能够灵活地处理来自...
中台是在将应用以微服务纵向拆分的基础上,加上横向切分,实现共享能力与上层应用分开,形成可复用的共享服务层,从而促进业务和数据在各应用间的交叉共享,大大减少重复建设和重复投资。 数据仓库不是中台 数据...
在快递行业的IT架构中,解耦与微服务的实践已经成为提升效率和服务质量的关键。传统的IT架构常常面临诸多问题,如代码复制导致的耦合、复杂性扩散、数据库耦合等,这些问题都限制了系统的可扩展性和灵活性。 首先,...
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构必备] Spring cloud 微服务核心组件集 mica v1.1.1 发布相关的知识,希望对你有一定的参考...•优化日志,dev 环境日志,不按内存切分,不使用gz压
然而,数据库拆分并非易事,需要面对多实例管理、垂直切分等问题,同时还需要确保SQL质量。为了解决这些问题,可以采取数据库私有化策略,让每个服务拥有自己的数据库,并提供有限且通用的接口以保持性能。此外,...
在Service Mesh与微服务的切分上,新浪微博采用了类似Service A、B、C这样的微服务划分,并通过Weibo Mesh实现这些服务之间的通信和管理。Weibo Mesh总体架构分为容器化服务和客户端两个部分,确保在不同的服务之间...
微服务的切分方法也有助于组织实现更精细化的开发流程,鼓励小团队的快速迭代,通常要求至少每两周完成一次迭代。 DevOps的引入是为了加速开发和运维的协作,以实现更高效的业务需求响应。DevOps流程的标准化包括...