垂直服务化拆分-分布式服务架构
来源:互联网 发布:如何申请开淘宝网店 编辑:程序博客网 时间:2024/04/29 07:18
转载自:
http://www.oschina.net/question/260548_158110?nocache=1491549674568
这是我加入公司后,公司架构的演变,但本身也有些问题想听听大家的想法。
加入这家公司后,在公司业务发展的同时,技术架构也逐渐在发生变化,垂直应用架构无法应对,所以我们进行了垂直服务化拆分。
最初我们跟很多公司一样,将核心业务拆分出多个服务应对多个垂直应用。起初,只是简单的暴露接口使用Hessian,通过配置服务的url调用。
但随着服务越来越多,没有一个统一的注册中心对这些服务管理,单个服务的压力越大,想将各个服务做集群。
最近看到zookeeper,可以做一些分布式文件配置,心跳检测,所以想使用zookeeper的节点来做注册中心,每个服务的提供方提供一个客户端,进行注册服务,zookeeper本身可以做心跳检测,一旦一个服务挂了后,可以将这个服务的注册信息提剔除,新增的服务在启动时会注册到zookeeper。
消费端,从注册中心订阅服务,可以从注册中心获取服务列表,本地缓存服务列表,及时服务中心宕机也不会影响使用,zookeeper更改服务列表信息也可以通知到消费端进行本地修改。
淘宝的dubbo本身做的很棒,但是本身系统复杂,部署麻烦,zookeeper节点存储的是每个接口的方法,基本都是Invoker思想。
我本身喜欢简单,目前架构进行修改后,可以支持未来一段时间应用,让我们可以腾出手做别的事情。
我的想法是,zookeeper每个节点存储,服务的地址,消费端有自己实现负载均衡获取地址后,进行访问服务。集群的配置文件放入zookeeper内。
不知道大家有什么想法,或者说类似的案例。 想听听多些思路。
引用来自“harries”的评论
哎,其实没有必要整怎么复杂,搞一个分布式hashmap存放服务的url就行了,各个客服端直接从hashmap里面拿,不过自己实现心跳,引用来自“harries”的评论
哎,其实没有必要整怎么复杂,搞一个分布式hashmap存放服务的url就行了,各个客服端直接从hashmap里面拿,不过自己实现心跳,引用来自“Recall”的评论
本身要实现的并非是负载url这些简单的功能,这只是其中的一点,在分布式环境下的协调,使用zookeeper的特性来处理的,如果本身只要实现这一点是很简单,那么对分布式环境下处理不了一些问题,还有什么意义呢引用来自“harries”的评论
哎,其实没有必要整怎么复杂,搞一个分布式hashmap存放服务的url就行了,各个客服端直接从hashmap里面拿,不过自己实现心跳,引用来自“Recall”的评论
本身要实现的并非是负载url这些简单的功能,这只是其中的一点,在分布式环境下的协调,使用zookeeper的特性来处理的,如果本身只要实现这一点是很简单,那么对分布式环境下处理不了一些问题,还有什么意义呢引用来自“harries”的评论
完全可以自己实现呀,写一个选举算法,自动推荐主我来分享下我的经验。
起初,我的架构和你现在的差不多一样,用的zookeeper.这个东西刚开始接触的时候感觉太好了。基于node和watcher可以快速构建出符合分布式标准的架构。比如做横向扩展,只需在某服务的节点下注册下server host&port. Master的负载均衡器就能快速感知。Master的单点故障也能通过竞争唯一node来解决。分布式锁,任务调度,消息容错,简直随手捏来。(当然这些代码都需要自己写,zookeeper只是提供给你了些基本的api.)
测试的时候什么都很好,等部署到生产后发现问题还是很多的。首先最要命的就是watcher通知滞后。(这也是我最终放弃zk的原因)肯定能收到通知,但是大多时候都很滞后(我用的java客户端,代码都是直接参考官方的,也可能是我代码太差),对于那些及时响应的应用影响很大,甚至会产生错误导向。还有一些小问题,差不多也忘了。。。 囧。。
如果你还是要坚持用zookeeper,那么我建议你先掌握一个算法:CAS - compare and set. 这个算法是开发zookeeper经常用到的。就是用来解决race condition的。zk为每一个node提供了一个version number. 结合CAS就可以做原子操作了。
我现在的分布式架构缩减了很多,Master(nginx+lua) + Slave[tomcat(restful api)] + redis(缓存, 任务调度,消息容错)
--- 共有 9 条评论 ---如果自己实现 估计做着做着 就又搞出一个dubbo来了。。
dubbo还是非常方便的。
评论(0) 引用此评论 举报引用来自“zhang1hang2”的评论
如果自己实现 估计做着做着 就又搞出一个dubbo来了。。
dubbo还是非常方便的。
不错!分享一个Dubbo项目实战参考内容:
http://www.roncoo.com/course/view/f614343765bc4aac8597c6d8b38f06fd
评论(0) 引用此评论 举报- 上一页
- 1
- 2
- 垂直服务化拆分-分布式服务架构
- 分布式web服务架构
- Java 分布式服务架构
- 分布式服务架构和面向服务架构
- 服务化拆分
- 分布式系统架构之框架化服务
- 分布式web服务架构(二)
- jeesz分布式架构-RestFul服务
- 九周九分布式服务-架构演进
- 九周九分布式服务-架构演进
- 九周九分布式服务-架构演进
- 组件化、模块化、集中式、分布式、服务化、面向服务的架构、微服务架构
- 组件化、模块化、集中式、分布式、服务化、面向服务的架构、微服务架构
- 分布式、服务化的ERP系统架构设计
- 分布式、服务化的ERP系统架构设计
- 分布式、服务化的ERP系统架构设计
- 分布式web服务架构--http基础(三)
- 一种简单的分布式系统服务架构
- [机房练习赛4.7] 碰杯 区间DP
- Java读取word文档
- Java中移位运算符
- springboot jsp项目 打包jar及发布
- leetcode-59 Spiral Matrix
- 垂直服务化拆分-分布式服务架构
- RHEL7--UNIT5--用户与组管理
- 对于概率论数字特征的理解
- Window 环境下构建React APP
- 如何判断两个IP属于同一个网络
- Selenide浏览器的选择
- 大数处理,带大数开根号
- Building a Module
- Javascript闭包的几种写法及用途