说说微服务
微服务(或称微服务架构)是一种架构风格,它将单一应用程序拆分成小型服务,每个服务都在独立的进程中运行并通过网络进行通信。这些服务可以用不同的编程语言编写,通常拥有自己的技术栈,包括数据库和数据管理模型,并且可以独立部署和扩展。这种架构风格有助于提高系统的可维护性和可扩展性,并且可以使用容器技术和服务网格等工具来简化部署和管理。
微服务架构使应用程序更易于扩展和更快地开发,从而加速创新并缩短新功能的上市时间。故而微服务已是现在互联网企业中十分常用的架构风格。
说说微服务架构的优势
独立开发:所有微服务都可以根据各自的功能轻松开发。
独立部署:根据他们所提供的服务,可以在任何应用中单独部署
故障隔离:即使应用中的一个服务不起作用,系统仍然继续运行
混合技术栈:可以用不同的语言和技术来构建同一应用程序的不同服务
粒度缩放:各个组件可根据需要进行扩展,无需将所有组件融合到一起
微服务有哪些特点?
- 解耦—系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展
- 组件化—微服务被视为可以轻松更换和升级的独立组件
- 业务能力—微服务非常简单,专注于单一功能
- 自治—开发人员和团队可以彼此独立工作,从而提高速度
- 持续交付—通过软件创建,测试和批准的系统自动化,允许频繁发布软件
- 责任—微服务不关注应用程序作为项目。相反,他们将应用程序视为他们负责的产品
- 分散治理—重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以
- 自由选择最有用的工具来解决他们的问题
- 敏捷—微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃
微服务与 SOA 的区别
1、设计理念不同
微服务:微服务是以业务能力为中心,重视服务的自治性,每个服务都有自己独立的团队、数据、环境、技术栈等,强调敏捷和快速迭代。
SOA:SOA注重的是服务的重用性,倾向于通过统一的服务总线将所有服务连接起来,形成全局的服务视图,强调的是系统的整体性和一致性。
2、数据管理不同
微服务:在微服务架构中,每个服务都有自己的独立的数据存储,以实现服务之间的松耦合。
SOA:在SOA架构中,常常使用统一的数据存储,以便进行全局的数据管理和数据共享。
3、服务规模不同
微服务:微服务倾向于创建小型、轻量级的服务,可以快速启动和停止,便于进行快速迭代和持续交付。
SOA:SOA的服务通常比较大型,包含多个功能,通常更加复杂和庞大。
4、通信方式不同
微服务:微服务通常使用轻量级的通信方式,如HTTP/REST,JSON等。
SOA:SOA通常使用企业服务总线(ESB)进行通信,更加复杂和重量级。
5、服务治理不同
微服务:微服务倾向于使用轻量级的服务治理方式,强调服务的自治性。
SOA:SOA通常需要更加复杂的服务治理机制,包括服务的注册、发现、路由、版本控制等。
6、部署方式不同
微服务:微服务支持独立部署,可以进行持续集成和持续部署。
SOA:SOA的服务通常需要一起部署,更新和维护更加复杂。
如何拆分服务
微服务拆分是指将原本存在于单个应用中的服务从中拆分出来,一边实现隔离,另一方面实现解耦、彻底分离。
1、业务拆分:首先,我们要明确自己的服务所处的业务场景,根据业务功能进行拆分,在设计时需考虑业务的可划分性,不宜将过于细小的业务片段独立成服务,这样处理不仅有违业务逻辑的直觉,还对系统的维护带来困难。
2、功能拆分:在业务划分的基础上,再进行配套服务功能的拆分。一般来说,这样的拆分方式实现上比较容易,可以选择将某一个服务的相对独立的功能拆解出来单独成服务。在功能的拆分过程中需要考虑拆分后的服务所需的数据存储、运行环境等是否能够满足,则在最终实现上可能也需要考虑到这些问题。
3、数据拆分:
在实际的运行过程中,也需要考虑服务之间的数据交互。在进行服务拆分的时候,会出现一些公共的数据存在于多个服务之间,这个时候就可能需要按照一定的原则对数据进行拆分。一般来说,数据拆分将服务划分为单一负责一部分数据的服务,避免多服务间数据交互问题。
4、接口拆分:在微服务架构中,服务之间通过暴露接口来实现交互。在服务划分的过程中,我们还需要考虑服务间的接口拆分。拆分出来的每个服务都应该对外暴露一部分接口以供其它服务调用,接口拆分主要是根据服务的功能和使用场景进行合理的接口设计。
前后端分离是如何做的
如何解决跨域
常见微服务框架有哪些
- Spring Cloud:一个广泛使用的微服务框架,提供一系列工具来简化开发、部署和管理微服务。
- Kubernetes:一个开源容器编排工具,发布、部署和管理微服务。
- Docker:一个容器化平台,可以方便地打包、分发和运行微服务。
- Apache Dubbo:一个高性能、轻量级的分布式服务框架,支持RPC和RESTful风格的通讯协议。
- ServiceComb:华为开源的微服务框架,支持多种语言和协议,提供服务注册、发现、路由、负载均衡等功能。
- Istio:一个开源服务网格框架,提供流量管理、策略和安全性等功能,能够解决微服务应用程序中的通讯问题。
- Apache ServiceMix:一个基于Java的开源ESB(企业服务总线)平台,提供完整的ESB功能,包括路由、协议转换、转换、审核、安全性等。
什么是不同类型的微服务测试?
在使用微服务时,由于有多个微服务协同工作,测试变得非常复杂。因此,测试分为不同的级别。
- 在底层:我们有面向技术的测试,如单元测试和性能测试。这些是完全自动化的。
- 在中间层面:我们进行了诸如压力测试和可用性测试之类的探索性测试。
- 在顶层:我们的验收测试数量很少。这些验收测试有助于利益相关者理解和验证软件功能。
说说 RPC 的实现原理
说说 Dubbo 的实现原理
你怎么理解 RESTful
Representational State Transfer(REST)/ RESTful Web 服务是一种帮助计算机系统通过 Internet 进行通信的架构⻛格。这使得微服务更容易理解和实现。
微服务可以使用或不使用 RESTful API 实现,但使用 RESTful API 构建松散耦合的微服务总是更容易。
说说如何设计一个良好的 API
如何理解 RESTful API 的幂等性
如何保证接口的幂等性
怎么考虑数据一致性问题
说说最终一致性的实现方案
微服务如何进行数据库管理
如何应对微服务的链式调用异常
对于快速追踪与定位问题
微服务的安全