随着云计算业务的快速发展,国内外云计算企业的专利之争也愈发激烈。在云计算这样的技术领域,专利储备往往代表着企业最新的技术实力。华云数据本期“智汇华云”专栏将针对“浅谈微服务架构之服务发现”技术,与大家共同分享云计算领域的最新技术。
由于业务量大幅增长,华云数据决定对业务增长导致不断臃肿的单体应用进行重构,重构后的应用选择微服务架构。微服务架构最大的优势是语言的开放性,可以根据业务场景选择最合适的语言。另外对于不止一个技术栈的公司组织架构,也能带来很好的融合协作机会。华云数据的主要技术栈是JAVA,PHP。JAVA自不必多说,其微服务框架spring cloud对微服务有非常全面且完善的一条龙支持,简直是微服务架构开发的利器,而PHP则有所欠缺,特别是在服务治理部分。比如在做服务注册、发现的时候比较痛苦。
我们的方案
1、为什么要使用服务发现
下图1 ,是一个简单的高可用架构图,我们看到集群组部署有3个节点,每个节点分别部署有一个服务A。在它前面有负载均衡,以nginx做负载均衡为例,我们会在配置文件手动配置上这3个节点的服务A的地址,根据负载策略做转发。
图2
与传统方式不同的是,服务的地址是弹性伸缩,是可变的。这种弹性带来最大的好处是服务可以根据流量、根据CPU、内存等开销,依据一定的策略,横向扩展或减少服务实例。除了能支撑大量的峰值访问,还能带来非常大的成本节约。另外特别说下,docker及其衍生出来的Kubernates之类的软件或解决方案,使得这种资源调度,弹性伸缩,架构监控等有了很好的基础层保证。回过头来说,既然服务地址可变,那么人工配置的方式肯定不行,我们需要一种自动发现服务地址变更的机制。
2、服务发现的机制及发现方式
这种机制即服务发现,也是微服务架构最常使用的技术栈。如下图 3,我们引入一个注册中心。服务实例在启动的时候自动把地址注册到注册中心,在访问相应服务的时候,先通过注册中心拿到待访问服务实例的地址,然后依据一定的策略访问即可。
图4
2.2客户端发现
从下图5可以看到,跟服务端发现不同的地方是,待访问服务的地址由客户端从注册中心获取,并且客户端需要实现负载(比如待访问的服务地址有3个,那么客户端需要依据一定的负载策略,找出其中一个地址进行访问)。
图6
3、工具介绍及总结
Netflix OSS 是典型的客户端发现范例;Netflix Eureka 是服务注册表,Netflix Ribbon是IPC客户端,与Eureka一起实现CLB。对docker无明确支持
Consul 是典型的服务端发现范例;通过consul template监听consul中服务地址的变动,自动生成或更新nginx.conf,并生效配置。对docker有很好的支持
微服务架构的性质决定了它的复杂性,存在成百上千个微服务,而每个微服务又可能分布在多个不同节点,所以全栈监控很重要,而服务发现则是其中很重要的一环。通过它,我们就知道整个系统有多少个微服务,版本是什么,每个服务的实例数有多少,状态如何。而这些又是一个完整自动化运维架构的基础,发挥微服务架构最大的价值非常重要,大大减少运维人员在部署、问题排查上冗余工作,大幅提升工作效率。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:SEO优化专员,转转请注明出处:https://www.chuangxiangniao.com/p/941321.html