企业微服务架构与实践全解析
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保护 |
| 宠物诊所评价 | 未受保护 |
- 检查应用程序运行状态 :在测试应用程序之前,检查所有应用程序是否在Docker容器中运行。
-
测试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'
-
将
PUT_CLIENT_SECRET_HERE替换为实际的Keycloak凭证密钥。 -
执行命令后,会得到一个JSON响应,使用JSON格式化工具复制和格式化该响应,提取其中的
access_token属性值。 -
将
access_token传递到请求头中,用于调用受保护的服务。
通过这样的安全配置和测试流程,我们可以确保微服务架构的安全性,防止非法访问和数据泄露。
8. 微服务架构的未来展望
随着技术的不断发展,企业微服务架构也将持续演进。未来,微服务架构可能会在以下几个方面得到进一步发展:
- 智能化管理 :借助人工智能和机器学习技术,实现微服务的智能化管理。例如,自动识别性能瓶颈、预测资源需求、自动调整扩展策略等,从而提高系统的稳定性和效率。
- 边缘计算集成 :随着物联网的快速发展,边缘计算将与微服务架构深度融合。将部分微服务部署在边缘设备上,可以减少数据传输延迟,提高系统的响应速度,满足实时性要求较高的应用场景。
- 安全技术升级 :面对日益严峻的安全挑战,微服务架构的安全技术将不断升级。如采用零信任架构、区块链技术等,进一步加强数据的安全性和完整性。
- 跨云部署 :企业可能会选择在多个云平台上部署微服务,以实现资源的优化配置和容错能力的提升。这就需要解决跨云环境下的网络、安全、管理等方面的问题。
总之,企业微服务架构为企业带来了更高的灵活性、可扩展性和开发效率。通过深入理解和掌握微服务架构的各个环节,包括规划、设计、开发、部署、管理和维护等,我们可以构建出更加稳定、安全、高效的企业级软件系统。同时,关注微服务架构的未来发展趋势,不断学习和应用新的技术,将有助于我们在激烈的市场竞争中占据优势。
超级会员免费看
168万+

被折叠的 条评论
为什么被折叠?



