开发者学堂课程【5天突破 Spring Cloud:网关、Nacos 和 Sentinel】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/781/detail/13704
网关、Nacos 和 Sentinel
后期扩展需要详细说明, zuul本身是网关代理,它还有过滤器机制,过滤器本身是为拦截请求,包括四种,接下来是安全验证,验证身份,一般基于 token 令牌,客户端进行加密字符串,然后拦截进行比对调用外部的令牌服务也可以调用数据库对比其是否正确,也可以做日志即简单的打个时间数,观察每个请求调用的开始时间和结束时间了解大概的时间,缓存即有些服务查询结果使用次数较多比如这个服务属于全域性的配置,首页有几个商品配置一般可以用缓存的方式本质上是为了性能,重复性的不怎么改变的这部分数据可以使用缓存,本质上缓解数据库链接程序的次数,一定程度上缩短请求处理的时间,路由即转发请求。这些是扩展的思考点。与其相似的产品如 spring cloud gateway ,产品本质上也是网关,名字具有迷惑性。二者都是 spring cloud 体系,一个属于 netflix 公司,一个属于官方公司。其他公司会不会开发相似的网关技术,比如像阿里或者其他公司开源这样的项目,存在差异,作为扩展了解。基于响应式异步模型,充阻量会高一些。其他版本改的均不错。
阿里体系专注的技术制作良好,自己在做之后的项目中,视野不要过于局限,仅知道某一种框架或者某一种技术,融会贯通。实际上,在
k8s 的很多领域中,不同阶段会诞生很多新的框架或者一些工具,可能在某方面会更优秀,推出的时间晚,其本身会吸取之前的经验教训,把缺点都规避,这是后来出现的框架的优势。
但是在推广方面也会遇到一些问题,公司移用一些成熟的框架。做多手准备,多了解多学习,注意 spring cloud 现在有很多公司在贡献像官方的公司,最早的 netflix 公司,netflix 公司现在很少贡献,利于纷争,两家公司分道扬镳。
阿里巴巴之前的经典的开源框架进行开源,像是 nacos 较分布式的服务注册工具,也可以进行配置服务。这是作用较好的,官方 confident 配置的性能不是很好,国内很多公司会替换成阿里的nacos ,nacos 发行到2.0,修复了很多 bug, 性能也也有改进。
沿优性比 europe 好很多,另外像是熔断限流有更友好的功能强的 sentinel ,是阿里贡献的比较优秀的几个框架。还有分布式服务中, nacos 是动态命名与配置服务的缩写,涉及到一个问题即它有一个角色包括注册、管理、服务以外支持如灰度发布。
之前提到过的式互备的新优化支持,careful 服务也不例外,配置服务不能丢掉,像携程上开发比较优秀的配置服务叫 apollo ,apollo 在古罗马是太阳神的意思,在中国比较知名的文明是莆田的男科医院,在 k8s 领域贡献非常稳定的配置中心工具叫做 apollo ,简称 nacos 具备搜索中心和配置中心两个角色。现在也在考虑之前讲到的基本的工作原理之外还去考虑对接原生的一些工作知识,如: k8s 、灰度发布等均支持的很好,有些可能偏运维,开发有些与运维有关联,作为了解知道大概区别即可。
阿里的开源项目除了 nacos 以外还有常说的 dubbo ,其理论上很多国内的公司企业在使用 dubbo 或者 dubbo 的一个分装框架,相比于讲到的开发 spring cloud 服务接口,它更优秀的地方在于十年前已经在尝试进行大规模服务群的治理,而且他的协议更多,部署方式更多。实际上 spring cloud 基于 spring boot 来说也存在很多局限性,我们不能对于一种框架过于执着,作为一名技术爱好者需懂的对比变通,了解知道每个技术的优缺点。
之前的课程除了讲到 dubbo 以外还有 rocketMQ 是比较优秀的集中推荐的开源项目, seata 是进行监控的,与 hystrix 相比原则上是同一类产品,但前者更友好更强大,下面讲到的调度、sms 很多都是对接阿里云服务,了解即可。 cron 属于分布式微服务里的框架,可以了解。
Nacos 现在可以对接各种框架, dubbo 、spring cloud、还有其他原生的服务也可以对接,图中提到的协议,客户端协议有多种, nacos 本身部署集群模式要考虑高敏化和高可用问题。 data Server 包括持久层的数据库, EDCD,mysql,s3 等各种方式存储,图中对接其他数据的包括 conberence,consistency,ureckon 比较有趣,功能比较优秀的开源项目,进行了解即可。有些可能使用到提前储备一下。
真正做注册发现,服务管理不仅仅是发展监控还涉及到服务淘汰问题,若是大规模服务管理,还涉及到怎么样分类管理,所以可能叫 naming 命名空间,方便分组管理服务的重要机制。
三、Nacos 与 Eureka 对比
对比下这几个作用中心来看,以 eureka 为入门进行了解。Nacos较好一些,出现较晚同时阿里的 nacos 开发团队经验更加丰富,付出的心血更多,两者均很优秀。
只是 Eureka 作为前辈,为 spring cloud 的发展奠定了基础,贡献巨大, nacos 的优秀离不开 Eureka。图中值得注意的点是:功能对比缺失, Eureka 基本上是进入维护时期更新较少,功能不进行扩展开发。 nacos 本身版本还在不断的迭代更新,在各种新功能的推行,如: k8s、跨中心同步调度、灰度发布等等方面做的非常好,而且 nacos 还可以做配置服务。
需要注意 Eureka 本身是注重可用性, nacos 也可关注可用性、一致性。这里存在区别,Eureka 本身强调一致性,它其中的一些状态会锁死,暂时不处理请求 nacos 相对而言模式更多一点。 netflix 公司很强,在国内现在无法看到,在国外较为出名的视频管理公司。做出的贡献比较大,贡献最初的 spring cloud 微服务框架。
四、Nacos 与其他主流注册中心对比
其他主流中心: zookeeper 较为久远,consul 是 HashiCorp 公司开发,很多公司在使用。
nacos 现在所做大有取代其他主流的趋势, nacos 本身比较完善的地方,即中国很多大学,公司上到了美国实体的名单,consul 本身企业,属于企业微服务进到公司不可以使用。按照协议,企业公司不可使用。 nacos 不存在这个风险,Eureka 也不存在这个风险。这是不同于其他主流注册中心的地方。
Nacos 也有单机和集群模式,使用于生产环境集群,开发阶段测试可以用单机,启动用命令环的方式启动,不需要用 spring boot 再做个服务再启动, nacos 简单很多,直接启动就可以用。
五、Nacos 微服务分布式架构角色
如图是 nacos 官方的脑图,由图可知 nacos 在功能上很强大,在大规模集群的部分包括最新的原生部分、 k8s 部分集成元素做的也很到位,集大成者不仅仅单一只是某一部分表现突出,而是对接几乎所有的编程语言全新的一套注册中心和配置服务的工具。观察具体代码,相较于之前,nacos 不需要启动,在官方下载数据包,启动数据包,用命名方式,解压完成之后有配置文件,因为其本身也是个 java 程序,文件包里有 mysql ,可以创建一个表和数据库,然后配置一下,改完链接本地数据库,观察具体数据配置如图。
典型的 spring boot 的配置,路径,8848端头,在图示位置还可以设置数据库,设置 mysql ,mysql 配置的例子、用户密码。之后就是与之相关的包括心跳监测相关的一系列配置,共五秒。还有其他的配置,不同的机制,像是普罗米修斯也可以,管理暴露了一些地址。大家可以灵活选择,比 Eureka 要更强一些,做对比学习,更容易去理解产品的优劣,具体看一下启动过程:
先启用命令行,直接就授权命令,加入 - mstandalone 是单机模式,换成 class 模式就是集群模式,暂时不需要集群模式,仅作为个人练习用单机模式即可。启动完成之后会出现暴露日志信息 started successfully 指单机模式已经成功启动,本机可以访问如图:
接下就是与其集成,作为微服务可以进行集成,作为代理也可以集成,网关也可以集成,基本原理是将地址替换即可,其他都没问题。