17、企业微服务架构与实践全解析

企业微服务架构与实践全解析

1. 企业微服务架构概述

在开始使用微服务之前,我们需要明确是否适合采用微服务架构。可以通过回答以下问题来判断:
- 团队是否了解微服务?
- 业务是否足够成熟以采用微服务?
- 是否有敏捷的DevOps实践和基础设施?
- 是否有可扩展的本地或云基础设施?
- 是否有使用现代工具和技术的支持?
- 数据库是否准备好进行去中心化?
- 是否得到所有利益相关者的支持?

如果对以上问题的回答都是肯定的,那么就可以考虑采用和推出微服务。推出微服务最难的部分在于数据和基础设施,因为传统应用通常是大型单体应用,与去中心化、松耦合的微服务不同。架构微服务时,在不同阶段需要应用多种技术。

2. 企业微服务架构的阶段

企业微服务架构的推出包括以下阶段:
| 阶段 | 描述 |
| ---- | ---- |
| 规划与分析 | 在创建企业微服务架构之前,需要根据需求分析是否适合。也可以仅为应用的一部分实现微服务。从传统单体架构过渡到微服务可能是一个耗时且复杂的过程,但如果规划得当,可以无缝推出。让所有利益相关者支持这一转变至关重要,团队成员对微服务的了解也是关键的成功因素。 |
| 设计 | 设计阶段可以使用设计模式,如按业务能力分解、按领域/子领域分解、API网关模式、链式微服务模式、每个服务一个数据库、命令查询责任分离模式、服务发现模式、断路器模式、日志聚合模式等。同时,要考虑安全因素,如评估认证策略、安全规则、基于权限的访问、OAuth和SSL等。还要检查应用中的隐私特定标准,如HIPAA、GDPR、PIPEDA、银行法案等,以及加密标准,如静态加密和传输中加密。此外,数据保留策略也是设计时需要考虑的因素。 |
| 开发 | 开发是实现微服务的重要阶段。始终使用最新的稳定支持版本进行开发,使用Micronaut框架进行自动化测试,包括单元测试、服务测试和集成测试。创建每个服务的单独版本控制策略,将服务存储在单独的存储库中,并确保开发、QA、UAT和PROD环境同步,具有相同的基础设施。开发时要考虑微服务的向后兼容性,为每个微服务使用单独的数据库。 |
| 部署 | 部署时应使用自动化工具和技术,利用快速应用部署策略。可以使用容器、虚拟机、云、Jib和Jenkins等工具,高效利用基础设施,避免过度分配。确保有专门的微服务DevOps策略,以促进持续集成和持续交付(CI/CD)。 |
| 管理和维护 | 维护多个微服务至关重要且复杂。使用分布式日志记录、跟踪和监控工具,如Elasticsearch、Logstash、Kibana、Prometheus和Grafana等。使用Sonar DevSecOps监控代码库的健康状况,定期检查代码中的安全漏洞。经常更新技术版本、操作系统和工具,实时监控CPU使用率、内存占用和存储空间。在运行时扩展基础设施,避免硬件过度使用。 |

3. Micronaut的OpenAPI理解

API是机器之间相互交互的通用语言,拥有API定义可以确保有正式的规范。所有API都应该有规范,这可以提高开发效率并减少交互问题。规范可以作为文档,帮助第三方开发人员或系统轻松理解服务。Micronaut在编译时支持OpenAPI(Swagger)YAML。OpenAPI Initiative(OAI)以前称为Swagger Specification,用于创建机器可读的接口文件,用于描述、生产、消费和可视化RESTful Web服务。OAI现在是一个推广供应商中立描述格式的联盟。OpenAPI也称为公共API,向软件开发人员和公司公开提供。Open API可以使用REST API或SOAP API实现,RESTful API是行业中最流行的API格式。OpenAPI必须有强大的加密和安全措施,这些API可以是公共的或私有的(封闭的)。公共OpenAPI可以通过互联网访问,而私有OpenAPI只能在防火墙或VPN服务内的企业内部网中访问。Open API可以生成准确的文档,包括所有必需的元信息、可重用组件和端点详细信息。OpenAPI Specification(OAS)有多个版本,当前版本是3.1。你可以在https://www.openapis.org/ 了解更多关于OpenAPI的信息。

4. Micronaut的扩展

在设计和实现企业应用时,需要规划扩展能力。使用微服务的最大优势之一是可扩展性,Micronaut服务的扩展是设计中的关键因素。它不仅仅是处理高流量,还在于以最小的努力进行扩展。Micronaut可以更轻松地识别扩展问题,并在每个微服务级别解决挑战。Micronaut微服务是单用途应用程序,可以组合构建大型企业级软件系统。运行时扩展是企业现代化的重要因素。

有三种扩展类型:x轴、y轴和z轴扩展。
- x轴扩展(水平扩展) :通过创建新的服务器或虚拟机来扩展,服务的整个基础设施都会扩展。例如,如果一个虚拟机中有10个服务运行,当其中一个服务需要额外的容量时,需要添加一个包含10个服务的虚拟机。这种扩展方式会有未使用的服务器容量,但可以提供无限的基础设施扩展。
- y轴扩展(垂直扩展) :通过向现有服务器添加容量来扩展,如添加额外的CPU、存储和RAM。例如,如果一个虚拟机中有10个服务运行,当其中一个服务需要额外的RAM和CPU时,需要向同一虚拟机添加额外的RAM和CPU。垂直扩展有一定的限制,不能超过特定的限制。
- z轴扩展(微服务水平扩展) :与传统的水平扩展类似。例如,如果在微服务容器环境中有10个服务运行,当其中一个服务需要额外的容量时,只需要添加一个微服务容器环境,而不是10个。这种扩展方式是对可用容量的最优化利用,允许根据需要多次扩展基础设施,是最具成本效益的方法,性能也比未扩展的环境要好得多。可以使用容器和云基础设施进行扩展,自动扩展功能非常强大,对微服务很有用。

graph LR
    A[扩展类型] --> B[x轴扩展(水平扩展)]
    A --> C[y轴扩展(垂直扩展)]
    A --> D[z轴扩展(微服务水平扩展)]
    B --> B1[创建新服务器或虚拟机]
    C --> C1[向现有服务器添加容量]
    D --> D1[添加微服务容器环境]
5. 实现Micronaut的微服务

接下来,我们将实现所学的内容。可以使用相关GitHub存储库中的代码,使用四个项目:宠物诊所、宠物主人、宠物评价和礼宾服务。还将使用Zipkin容器镜像进行分布式跟踪,使用Prometheus进行指标和监控,使用elk容器镜像进行Elasticsearch、Logstash和Kibana。具体步骤如下:
1. 设置Keycloak :运行以下命令创建Keycloak Docker镜像:

docker run -d --name keycloak -p 8888:8080 -e KEYCLOAK_USER=micronaut -e KEYCLOAK_PASSWORD=micronaut123 jboss/keycloak

创建完成后,启动Keycloak Docker镜像。
2. 复制客户端密钥 :Keycloak启动并运行后,从“Clients | Credentials”屏幕复制客户端密钥。
3. 更改超时设置 :在Keycloak控制台中,转到“Clients | Settings | Advanced Settings”,建议将测试示例代码的超时时间设置为15分钟。
4. 更新配置文件 :将密钥复制到宠物诊所、宠物主人、宠物评价和宠物礼宾服务项目的YAML应用程序配置文件中,更新 client-secret 。需要更新的文件如下:
- Chapter11/micronaut-petclinic/pet-clinic-reviews/src/main/resources/application.yml
- Chapter11/micronaut-petclinic/pet-owner/src/main/resources/application.yml
- Chapter11/micronaut-petclinic/pet-clinic/src/main/resources/application.yml
- Chapter11/micronaut-petclinic/pet-clinic-concierge/src/main/resources/application.yml
5. 执行Maven Docker构建 :在四个项目(宠物诊所礼宾服务、宠物诊所评价、宠物诊所和宠物主人)中执行以下Maven命令创建Docker镜像:

mvn clean compile jib:dockerBuild

注意,Postgres数据库和MongoDB数据库必须运行,并且宠物诊所和宠物评价的数据库表中必须有数据。
6. 检查Docker设置资源 :确保Docker设置中有四个CPU和至少6GB的内存,转到“Docker settings | Resources | Advanced”进行检查。
7. 创建docker-compose :创建Kafka、Zipkin、Prometheus和ELK的docker-compose。在终端或控制台中执行以下命令:

docker-compose create
# 或者
docker-compose up -d

Kafka的配置文件位于:Chapter11/micronaut-petclinic/pet-clinic-reviews/src/main/resources/kafka-zookeeper-kafdrop-docker/docker-compose.yml
Zipkin的配置文件位于:Chapter11/micronaut-petclinic/docker-zipkin/docker-compose.yml
Prometheus的配置文件位于:Chapter11/micronaut-petclinic/docker-prometheus/docker-compose.yml
ELK的配置文件位于:Chapter11/micronaut-petclinic/docker-prometheus/docker-elk
最后,在父级创建docker-compose,文件位于:Chapter11/micronaut-petclinic/docker-compose.yml

注意,除了宠物诊所评价项目外,其他项目都使用Keycloak进行安全配置:
| 项目 | 安全配置 |
| ---- | ---- |
| 宠物诊所礼宾服务 | 使用Keycloak保护 |
| 宠物诊所 | 使用Keycloak保护 |
| 宠物主人 | 使用Keycloak保护 |
| 宠物诊所评价 | 未受保护 |

  1. 检查应用程序运行状态 :在测试应用程序之前,检查所有应用程序是否在Docker容器中运行。
  2. 测试URL集成 :所有项目在Docker中运行后,可以从API网关调用所有服务:
    • 宠物主人:http://localhost:32584/api/owners
    • 宠物诊所:http://localhost:32584/api/vets
    • 宠物诊所评价:http://localhost:32584/api/vet-reviews

要获取安全令牌,在Keycloak上调用以下API:

curl -L -X POST 'http://localhost:8888/auth/realms/master/protocol/openid-connect/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=pet-clinic' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_secret=PUT_CLIENT_SECRET_HERE' \
--data-urlencode 'scope=openid' \
--data-urlencode 'username=alice' \
--data-urlencode 'password=alice'

注意,需要将 PUT_CLIENT_SECRET_HERE 替换为Keycloak凭证密钥。
10. 复制和格式化JSON响应 :使用JSON格式化工具复制和格式化JSON响应,复制格式化响应中的 access_token 属性值,并将其作为JWT传递。
11. 传递访问令牌 :将 access_token 传递到请求头中,调用服务。

最后,使用以下链接测试所有应用程序URL及其集成:
- API网关:http://localhost:32584/
- 服务发现:http://localhost:8500/ui/dc1/services
- 分布式日志记录:http://localhost:5601/app/kibana(Kibana默认用户名是elastic,密码是changeme)
- 分布式监控:http://localhost:3000/?orgId=1(Prometheus默认用户名是admin,密码是pass)
- 分布式跟踪:http://localhost:9411/zipkin/
- IDP:http://localhost:8888/auth/
- Kafka Kafdrop:http://localhost:9100/

通过以上步骤,我们测试了从网关到分布式监控、跟踪、日志记录和搜索的所有集成功能,完成了企业微服务在生产环境中的实现。

企业微服务架构与实践全解析

6. 微服务架构的关键考量总结

在实施企业微服务架构的过程中,有几个关键方面需要我们深入考量,这些方面贯穿了从规划到最终测试的整个流程。

关键方面 考量要点
可行性评估 在决定采用微服务架构之前,要全面评估团队对微服务的了解程度、业务的成熟度、是否具备敏捷的DevOps实践和基础设施、基础设施的可扩展性、对现代工具和技术的支持、数据库的去中心化准备情况以及所有利益相关者的支持等因素。
设计阶段 运用合适的设计模式,如按业务能力分解、按领域/子领域分解等,同时高度重视安全因素,包括认证策略、安全规则、隐私标准、加密标准等,还要考虑数据保留策略。
开发过程 使用最新稳定支持版本进行开发,借助Micronaut框架开展自动化测试,创建单独的版本控制策略,确保各环境同步,考虑微服务的向后兼容性,为每个微服务配备单独的数据库。
部署工作 采用自动化工具和技术,利用快速应用部署策略,高效利用基础设施,制定专门的微服务DevOps策略以促进CI/CD。
管理维护 利用分布式日志记录、跟踪和监控工具,监控代码库健康状况,定期检查安全漏洞,及时更新技术版本、操作系统和工具,实时监控资源使用情况,在运行时扩展基础设施。
扩展策略 根据实际需求选择合适的扩展类型,x轴扩展适用于需要无限扩展基础设施的场景;y轴扩展能在一定程度上提升现有服务器性能,但有容量限制;z轴扩展则是对可用容量的最优化利用,成本效益高。
graph LR
    A[微服务架构考量] --> B[可行性评估]
    A --> C[设计阶段]
    A --> D[开发过程]
    A --> E[部署工作]
    A --> F[管理维护]
    A --> G[扩展策略]
    B --> B1[团队能力]
    B --> B2[业务成熟度]
    C --> C1[设计模式]
    C --> C2[安全因素]
    D --> D1[开发版本]
    D --> D2[测试方式]
    E --> E1[自动化工具]
    E --> E2[DevOps策略]
    F --> F1[监控工具]
    F --> F2[安全检查]
    G --> G1[x轴扩展]
    G --> G2[y轴扩展]
    G --> G3[z轴扩展]
7. 安全配置与测试的重要性

安全配置在微服务架构中起着至关重要的作用。在本次实践中,我们使用Keycloak对多个项目进行安全保护,仅宠物诊所评价项目未受保护。通过设置Keycloak,我们能够对用户进行身份验证和授权,确保只有合法用户可以访问受保护的服务。

在测试过程中,获取安全令牌是关键步骤。通过在Keycloak上调用特定的API,我们可以获取到访问令牌,该令牌用于后续对服务的调用。具体操作步骤如下:
1. 确保Keycloak已正确配置并运行。
2. 调用以下API获取安全令牌:

curl -L -X POST 'http://localhost:8888/auth/realms/master/protocol/openid-connect/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=pet-clinic' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'client_secret=PUT_CLIENT_SECRET_HERE' \
--data-urlencode 'scope=openid' \
--data-urlencode 'username=alice' \
--data-urlencode 'password=alice'
  1. PUT_CLIENT_SECRET_HERE 替换为实际的Keycloak凭证密钥。
  2. 执行命令后,会得到一个JSON响应,使用JSON格式化工具复制和格式化该响应,提取其中的 access_token 属性值。
  3. access_token 传递到请求头中,用于调用受保护的服务。

通过这样的安全配置和测试流程,我们可以确保微服务架构的安全性,防止非法访问和数据泄露。

8. 微服务架构的未来展望

随着技术的不断发展,企业微服务架构也将持续演进。未来,微服务架构可能会在以下几个方面得到进一步发展:

  • 智能化管理 :借助人工智能和机器学习技术,实现微服务的智能化管理。例如,自动识别性能瓶颈、预测资源需求、自动调整扩展策略等,从而提高系统的稳定性和效率。
  • 边缘计算集成 :随着物联网的快速发展,边缘计算将与微服务架构深度融合。将部分微服务部署在边缘设备上,可以减少数据传输延迟,提高系统的响应速度,满足实时性要求较高的应用场景。
  • 安全技术升级 :面对日益严峻的安全挑战,微服务架构的安全技术将不断升级。如采用零信任架构、区块链技术等,进一步加强数据的安全性和完整性。
  • 跨云部署 :企业可能会选择在多个云平台上部署微服务,以实现资源的优化配置和容错能力的提升。这就需要解决跨云环境下的网络、安全、管理等方面的问题。

总之,企业微服务架构为企业带来了更高的灵活性、可扩展性和开发效率。通过深入理解和掌握微服务架构的各个环节,包括规划、设计、开发、部署、管理和维护等,我们可以构建出更加稳定、安全、高效的企业级软件系统。同时,关注微服务架构的未来发展趋势,不断学习和应用新的技术,将有助于我们在激烈的市场竞争中占据优势。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值