青训营笔记3:微服务相关 grpc| 青训营

94 阅读5分钟

微服务

微服务是一种软件架构风格,旨在构建大型应用程序和系统,将它们拆分成小型、独立的服务单元,每个服务单元都专注于执行一个特定的业务功能。与传统的单块式架构相比,微服务架构的主要目标是提高系统的可伸缩性、可维护性和灵活性。以下是关于微服务的简要介绍,共计500字。

微服务的背景

微服务架构的兴起可以追溯到云计算和互联网应用的爆炸性增长。传统的单块式应用程序在面对大规模流量和复杂性时常常变得笨重难以维护。微服务架构的出现解决了这些问题,它将应用程序拆分成多个小型服务,每个服务都可以独立开发、部署和扩展。这种方式使开发团队能够更快速地推出新功能,降低了故障的风险,同时提高了系统的可伸缩性。

微服务的特点

  1. 独立性: 微服务是独立的服务单元,每个服务都有自己的数据库和逻辑。这意味着开发团队可以独立开发、测试和部署每个服务,而不会影响其他服务。
  2. 松耦合: 微服务之间的通信通常通过API进行,这种松耦合的设计使得不同服务可以使用不同的编程语言和技术栈。
  3. 可伸缩性: 微服务可以根据需要进行水平扩展,这意味着可以根据流量的增加或减少来动态调整每个服务的实例数量。
  4. 独立部署: 由于微服务是独立的,因此可以独立部署,这使得快速发布新功能和修复漏洞变得更加容易。
  5. 分布式: 微服务通常分布在不同的服务器上,这使得系统更加弹性,但也需要考虑分布式系统的挑战,如数据一致性和通信故障处理。
  6. 自动化: 微服务架构倡导自动化,包括自动化部署、监控和扩展。这有助于降低操作复杂性。

微服务的优势

微服务架构具有多个优势,包括:

  1. 敏捷性: 微服务允许团队更快速地开发和交付功能,因为每个服务都可以独立开发和部署。
  2. 可伸缩性: 可以根据需求扩展单个服务,而不必扩展整个应用程序。
  3. 容错性: 单个服务的故障通常不会影响整个应用程序,这提高了系统的可用性。
  4. 技术多样性: 微服务架构允许使用不同的技术栈,选择最适合每个服务的工具和语言。

微服务的挑战

尽管微服务架构有很多优势,但也存在一些挑战,包括:

  1. 复杂性: 微服务架构通常比单块式架构更复杂,需要处理服务之间的通信、数据一致性和监控等问题。
  2. 分布式系统挑战: 分布式系统引入了新的挑战,如网络延迟、数据一致性和故障处理。
  3. 运维复杂性: 管理多个微服务的部署、监控和扩展可以变得复杂,需要投资于自动化工具和实践。

结论

微服务架构是一种强大的软件架构风格,可以帮助组织构建灵活、可伸缩和可维护的应用程序。然而,它不是适用于所有情况的银弹,团队需要仔细权衡其优势和挑战,以确定是否适合他们的特定用例。无论如何,微服务已经在许多大型互联网公司和企业中取得了成功,成为现代软件开发的一项重要实践。

grpc

RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。

RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。

也就是调用方和接收方将针对所提供的服务进行标准的规定,也就是类似规定了相同的一个函数,其输入参数,输出参数都相同。这样调用方就可以像调用本地函数的方法一样调用接收端的函数,增加了可用性和简便性,这种调用方法比RESTful方法更快。

Protobuf

Protocol Buffers,通常被称为protobuf,是一种轻量级、高效的数据序列化格式和编程接口,最初由Google开发,并于2008年开源发布。它的设计目标是提供一种可扩展的方法来序列化结构化数据,以便用于数据存储、通信协议、配置文件等多种用途。

使用了protobuf为工具生成所需要的rpc文件,源文件为.proto格式。

下面是用于定义这个消息类型的 .proto 文件。

syntax = "proto3";
​
message SearchRequest {
  string query = 1;
  int32 page_number = 2;
  int32 result_per_page = 3;
}
  • 文件的第一行指定使用 proto3 语法: 如果不这样写,protocol buffer编译器将假定你使用 proto2。这个声明必须是文件的第一个非空非注释行。
  • SearchRequest 消息定义指定了三个字段(名称/值对) ,每个字段表示希望包含在此类消息中的每一段数据。每个字段都有一个名称和一个类型。

etcd

etcd是一个开源的分布式键值存储系统,它通常用于构建可靠的分布式系统。etcd最初由CoreOS开发,并作为开源项目托管在GitHub上。该项目的目标是提供一个高度一致性、可靠性和可用性的分布式配置存储服务,以支持大规模分布式应用程序的配置管理和服务发现需求。

使用etcd为注册中心,每个微服务的rpc服务需要使用代码自动注册在etcd中。