- 优点:
① 每个服务都比较简单,只关注于一个业务功能。
② 微服务架构方式是松耦合的,可以提供更高的灵活性。
③ 微服务可通过最佳及最合适的不同的编程语言与工具进行开发,能够做到有的放矢地解决针对性问题。
④ 每个微服务可由不同团队独立开发,互不影响,加快推出市场的速度。
⑤ 微服务架构是持续交付(CD)的巨大推动力,允许在频繁发布不同服务的同时保持系统其他部分的可用性和稳定性。
2.缺点
微服务的一些想法在实践上是好的,但当整体实现时也会呈现出其复杂性。
- 运维开销及成本增加。
- 必须有坚实的DevOps开发运维一体化技能。
- 隐式接口及接口匹配问题。
- 代码重复。
- 分布式系统的复杂性。
- 异步机制。
3.常用技术选型
3.1基础层框架
SpringBoot:SpringBoot是构建微服务的基础框架,是SpringCloud的基础,其自带Tomcat,不需要在Tomcat中,可以直接启动。自身也有各项优点,如自动化配置、快速开发、轻松部署等,非常适合用作微服务架构中各项具体微服务的开发框架。它不仅可以帮助用户快速地构建微服务,还可以轻松简单地整合SpringCloud实现系统服务化。而如果使用了传统的Spring构建方式的话,在整合过程中用户还需要做更多的依赖管理工作,才能让它们完好地运行起来。
3.2 持久层框架
MyBatis:MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。通常会用于SpringBoot微服务框架。
3.3 中间集成
(1)RabbitMQ
RabbitMQ是基于AMQP协议的开源实现,由以高性能、可伸缩性出名的Erlang写成。目前客户端支持 Java、.Net/C#和Erlang。在AMQP(Advanced Message Queuing Protocol)的组件中,Broker中可以包含多个Exchange(交换机)组件。Exchange可以绑定多个Queue以及其他Exchange。消息会按照Exchange中设置的Routing规则,发送到相应的MessageQueue。在Consumer消费了这个消息之后,会跟Broker建立连接,发送消费消息的通知。此时Message Queue才会将这个消息移除。
(2)Elasticsearch
它是一个基于Apache Lucene实现的开源的实时分布式搜索和分析引擎。SpringBoot的项目也提供了集成方式:spring-boot-starter-data-elasticsearch以及spring-data-elasticsearch。
(3)Kafka
它是一个高性能的基于发布/订阅的跨语言分布式消息系统。Kafka的开发语言为 Scala。其比较重要的特性是:
l 高吞吐量、低延迟:Kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition,consumer group对partition进行consume操作。其高吞吐的特性,除了可以作为微服务之间的消息队列,也可以用于日志收集、离线分析、实时分析等;
l 可扩展性:Kafka集群支持热扩展;
l 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;