1
2
3
4
5
              Kubernetes (Mesos, Swarm)
|
| (服务编排)
(运行在) v
微服务 --------> docker

为什么微服务和容器技术几乎同时兴起?

容器技术的成熟为微服务的落地提供了基础,轻量化的容器是微服务运行的最佳环境; 微服务只有在容器的平台下,才能CI、快速交付;如果是传统的单体开发,每次开发新的feature都需要把整个SOA架构的服务重新部署,这样根本不能满足需求

SOA ~ EJB; 微服务 ~ Spring

服务发现的三个常用组件: Eureka, ZK, Consul
  1. Eureka侧重“可用性”: Eureka作为server和client: 都是用代码的方式; @EnableEurekaServer@EnableEurekaClient
  2. zk侧重“数据一致性”: zk作server, springCloud做client: 用zk启动端口为2181作server, zkInspector作为可视化工具看启动之后服务的情况, 然后代码中用@EnableDiscoveryClient注解的类作为client (添加依赖都没有算进来)
  3. consul作为服务发现: 类似zk,下载一个包consul启动(consul agent -dev), 然后跟上面zk类似添加依赖: spring-cloud-starter-consul-discovery,然后类上面添加注解@EnableDiscoveryClient启动client
  4. 注: zk, consul的server服务运行的端口都是配置文件中写好的
  5. zk服务器启动之后,需要第三方工具zkInspector看服务器挂载的服务情况,而consul本身提供了一个admin,服务器启动之后可以直接在服务端看到服务器运行情况
  6. CAP: Consistency, Availability, Partition Tolerance: 不可能三角形;
    • CA: RDBMS
    • CP: MongoDB, HBase, Redis
    • AP: CouchDB, Cassandra, DynamoDB
  7. zk, etcd侧重一致性,Eureka侧重高可用