作者回复: 第一层网关就是外部流量进入企业内部微服务的一个入口。该层网关的主要作用是反向路由,安全,限流/熔断,和日志监控等。常见可以用zuul做第一层网关,前置nginx对zuul做负载均衡。 企业内部的第二层网络是可选的,很多企业没有内部第二层网关,直接用基于注册中心配合客户端软负载,比如用dubbo + zk,或者spring + eureka方式。
作者回复: 对于对外暴露的服务,可通过https加密,有些涉及用户敏感数据的,需提供访问令牌(token)才可以访问。 另外,企业内部的基础服务一般不直接对外暴露,而是通过聚合层(或称BFF层)对外暴露,在聚合层也可以做一些安全控制。
作者回复: 你好,nginx成熟稳定性能高,但是因为历史比较悠久,所以历史包袱也重,比较偏向传统运维,对DevOps和开发人员不友好(或者说门槛比较高);kong可以认为是针对nginx的不足,专门针对现代微服务场景,在nginx/openresty内核的基础上升级改造而来,在DevOps开发友好性方面有很大改进。 如果企业现有nginx运行稳定,没有特别的DevOps开发定制需求(微服务网关,动态路由,灰度发布,灵活安全,细粒度监控等),那么并不需要升级kong;如果有DevOps需求,则可以考虑尝试升级Kong,当然直接扩展nginx也可以,不过门槛较高。
作者回复: 不管内部还是外部网关,主要作用是:反向路由,安全,限流熔断,监控日志等。作为对外入口,外部网关对安全有更高的要求,一般令牌校验/验签和防刷等职能都在外部网关上实现。内部+外部两层网关是一种架构风格,内部使用网关强调治理,规范内部调用必须通过内部网关,这样可以集中治理(安全,限流,监控,依赖关系等),不利一面是性能损耗和可用性风险。有些企业内部不使用网关,而是采用客户端直连调用服务,例如阿里dubbo,这种方式性能会好,但是集中治理较难实现。
作者回复: 外层网关高可用,可以用nginx做负载,也可以硬件如F5,也可F5+nginx两级负载。内网也可以有网关,相当于内外两层网关,也是一种架构风格。内网也可以不用网关,直接走客户端软负载,feign+ribbon+eureka是一种常见做法。
作者回复: 视情况,可以只用一层网关,也有很多企业使用内外两层网关架构,内部可用性能更好的nginx或kong等做网关,这种两层网关架构更强调内部现有基础设施兼容性和安全治理灵活性
作者回复: 外层可以直接用nginx/kong,性能应该会更好,但是由于历史原因,外层已经用zuul了,而且也很稳定,如果迁移的话有成本,而且可能会需要踩坑,所以暂时没必要做迁移。
作者回复: 限流主要使用hystrix组件实现,第5模块会专门剖析讲。灰度发布请参考我的微信文章现代发布技术https://mp.weixin.qq.com/s/kQQQQqxAHVglfBVf2NGD4w,灰度一般企业要定制,要和服务注册中心、发布系统等配合,实现较复杂。
作者回复: 外网nginx+内网kong是可以的,这样路由逻辑要做在nginx上,要掌握nginx+lua做成动态更新门槛较高,使用+zuul(java)门槛低一些,灵活性好,当然会有些性能损失,但要看规模和量,一般问题不大,而且zuul无状态水平可扩。