1 | Kubernetes (Mesos, Swarm) |
为什么微服务和容器技术几乎同时兴起?
容器技术的成熟为微服务的落地提供了基础,轻量化的容器是微服务运行的最佳环境; 微服务只有在容器的平台下,才能CI、快速交付;如果是传统的单体开发,每次开发新的feature都需要把整个SOA架构的服务重新部署,这样根本不能满足需求
SOA ~ EJB; 微服务 ~ Spring
服务发现的三个常用组件: Eureka, ZK, Consul
- Eureka侧重“可用性”:
Eureka作为server和client: 都是用代码的方式;@EnableEurekaServer和@EnableEurekaClient - zk侧重“数据一致性”:
zk作server, springCloud做client: 用zk启动端口为2181作server, zkInspector作为可视化工具看启动之后服务的情况, 然后代码中用@EnableDiscoveryClient注解的类作为client (添加依赖都没有算进来) - consul作为服务发现: 类似zk,下载一个包consul启动(
consul agent -dev), 然后跟上面zk类似添加依赖:spring-cloud-starter-consul-discovery,然后类上面添加注解@EnableDiscoveryClient启动client - 注: zk, consul的server服务运行的端口都是配置文件中写好的
- zk服务器启动之后,需要第三方工具zkInspector看服务器挂载的服务情况,而consul本身提供了一个admin,服务器启动之后可以直接在服务端看到服务器运行情况
- CAP: Consistency, Availability, Partition Tolerance: 不可能三角形;
- CA: RDBMS
- CP: MongoDB, HBase, Redis
- AP: CouchDB, Cassandra, DynamoDB
- zk, etcd侧重一致性,Eureka侧重高可用