cc-gateway
服务网关在当今服务化的背景下,还是很用的一个组件。一般来说很多公司选用高性能的nginx来实现,不过,这里是我实现的一个Java版的服务网关,至于原因,我会在后面介绍。该组件集成了Netflix开源的很多套件,来帮忙做服务的治理。
重新开发这个组件的原因: 1.nginx的开发使用的是C或者lua这样的语言,需要有专门这个技术栈的人
2.我们的主要系统语言是Java,如果对服务网关单独使用一种语言,不好做统一的控制和管理
3.依赖于Netflix的很多套件,我们可以非常方便的做负载均衡,服务化,监控和服务治理,如果使用nginx,需要开发的工作量太大,或者是我不了解这块有类似的开源解决方法
4.nginx的系统性能不用多说,单机肯定会高于cc-gateway,cc-gateway可用于性能不那么敏感,或者可以分布式部署多个,或者需要很多定制化的功能,而又不想或没条件基于nginx开发的情况
主要功能: 1.基于zuul的网关过滤服务,用来做策略、规则的动态的发布或回滚
2.基于archaius,来做配置的动态更新
3.基于ribbon实现网关对内部服务的负责均衡
4.基于Hystrix的服务访问控制和监控,同时对每个服务的参数可以定制(待完善)
5.基于yaml的自定义服务访问配置,支持服务Id的抽象
zuul:
ignoredPatterns:
- /**/admin/**
routes:
first:
path: /first/**
url: http://httpbin.org/
second:
path: /second/**
retryable: true
#serviceId 和url只能取其一
serviceId: service1
third:
path: /third/**
retryable: true
serviceId: service2
legacy:
path: /**
url: forward:/error/
services:
service1:
ribbon:
listOfServers: http://httpbin.org, https://httpbin.org:443
ConnectTimeout: 50000
ReadTimeout: 50000
MaxAutoRetries: 1
MaxHttpConnectionsPerHost: 200
MaxTotalHttpConnections: 500
service2:
ribbon:
listOfServers: http://www.baidu.com, http://www.baidu.com
ConnectTimeout: 50000
ReadTimeout: 50000
MaxAutoRetries: 1
MaxHttpConnectionsPerHost: 200
MaxTotalHttpConnections: 500
6.基于HttpClient的反向代理实现,后面可以替换为netty,提高性能