00:04
呃,大家好,今天我给大家简单分享一下基于SP cloud如何跨界各界高可用的微服务应用。呃,然后我今天这边的话主要分成三块,第一块是介绍一下北极星,因为我们频探的目前主要是依赖于北极星的一些服务注册啊,服务发现配置中心能力对,所以给大家先介绍一下北极星的相关的一些呃东西,然后第二块的话给大家介绍一下spring。然后第三块的话就是我会呃演示几个比较关键的一个DEMO,然后给大家演示一下如何用content的使用一些北极星的一些能力。然后首先我们看一下北极星这一块,呃,像北极星这些,我们看一下目前大家都会遇到一些哪些痛点啊,比如大家公司内部都会有呃架构师这种角色,然后如果我们公司在做一些微服务,微服务转型或微服务一些建设的时候,那架构师可能会就会去做一些服务的一些组的一些选型,对吧?像像常见的中心啊,那可能会去用CK啊,像等等,像配置中心也会有一些同类产品气流中心啊,路由之类的,对,所以呃,架构师在做技术选型的时候,他可能就需要考虑比较多的一些点,对吧?然后比如去做一些性能测试啊等等,那对于架构来说还是一个比较的一个事情。
01:31
啊,那当架构师已经做完技术选型之后,比如他著作中心使用的CK对吧,然后其他的,呃,比如限流中心用的等等,那对运维同学来说,有了一系列的组件之后,那运维同学就需要去运维这些组件。啊嗯,然后因为我们公司内部可能有需有许多的环境,那有多组建多环境,那就会导致运维同学的运维成本,其实运维压力也是比较大的啊,那同时呢,运有这么多的组件需要去做部署啊,去做升级啊等等,那其实对于资源的成本要求也是比较高的,所以呃,对运维来说,不管是运维成本还是资源成本都是比较高的,那对于开发者来说,因为有不很多不同的组件,那每个组件它有它自己的一个界面,一个自己的一个使用习惯,那对于研发同学来说,我需要去学习不同的组件,你比如你到公司A可能是这么一套解决方案,到公司B又是另外一套解决方案,那对研发同学来说,我就需要去适应很多的这些组的一些能力啊等等去学习,那所以对研发同学来,呃,其实也是会经常遇到,呃,需要学习不同的中介使用方式啊,然后公司内部如果环境组组织,比如是呃某一个组它的控制台。
02:50
你就你的浏览器收藏夹里面就要收到很多的这么一个地址,那其实也是不够友好。呃,所以北极星的话,呃,主要是解决刚才提到几个问题啊,首先第一个问题就是呃,北极星它是一个一站式的为服务解决方案,它既集成了著作中心,配置中心的能力,也同时集成了服务治理的一些能力,像长期的限流,熔断路由啊等等,所以对于对于这块来说的话,北极星是一个一站式的一个微服务解决方案,类似一个欧英旺的这么一个概念啊。第二的话就是呃。
03:24
最近几年呃,社区里面提供呃提到的云约生的概念也比较火,那云约生里面其实最核心的一个点就是弹集数弹性,那其实如果一个服务能达到极速弹性这么一个能力,其实是有要求的,比如它如果它的服务是完全无状态的,那呃这是一个标准运维的一个服务,那在这一块就处理起来就非非常简单,那北极星的话,它就是完全是一个无状态的一个服务,所以整个运维成本啊是也是比较低的,同时呢。北极星也集成一些service match的能力,能够息发一些叉DS的一些规则到这些数据面,能够做一些流量治理,对。
04:04
然后第三块的话,呃,北极星也有自己的一些SD全全语言的SDK,然后在SDK里面做了所有的事情,像注册中心,配置中心以及服务治理这些能力都是下沉到SDK里面的,那么如果你的公司里面内部有自己的一些RPC的框架。那那可以通过,呃,因为北极金它呃有一套比较简单的一个S,呃AAPI的接入能够快速的,嗯。接入北极星,然后能够享受到北极星这些治理的一些能力,对。同时呢,北极星目前也是一个开源的一个状态啊,大家有兴趣也可以关注一下啊。呃,然后给大家简单介绍一下北极星的核心技术原理,那刚才也提到就是北极它是一个完全无状态的一个服务,那其实整个架构也非常简单,就。从右面这幅图来看,其实跟大家的一个嗯,普通的一个业务应用可区别也不太大啊,最往上的就是一个API收购层,分成两个模块,一个admin API sdkmin SDK的API admin的API的话主要是用于控制台,控制台之类的一些接口吧,然后SDK的A就是给呃这些有加va的SDK,各SDK的一些使用的一些接口,那中间这一层的话就是核心的一个逻辑层,嗯,因为北极星是分成多个模块的,然后模块之间虽然都是在同一个进程内部,但在代码层面的话,每个模块是相对来说比较独立的啊,像配置中心有核心的一些通知的一个机制啊,像一些呃长链接的一些然破力的一些管理的一个机制啊等等啊注中心他要需要去处理心跳请求啊,然后一些服务这些概念对,所以在北极星内部虽然是同一个进程内部,但它的实现逻辑还是相对来说代码层面是隔离的啊,然后再往下就是存储层。
05:56
啊,存储主要分成三块,第一块就是呃,每个内部会有自己的内存缓存,主要是为了提高每个接口的一个响应的一个能力啊,然后呃用后去做呃持久化的一些操作,比如呃一个限流规则,一个路由规则,那这些规则是需要去做持久化的,像配置中心的配置也是要数据库去做呃持久化。
06:20
同时呢,也呃,如果公司内部开启心跳的一些能力啊,需要依赖一个red red主要是处理呃著作中心的一些心跳的一个请求,对,所以嗯,把所有的状态都是放在下方的存储层,那对于中间的收购,对于收购来说就是能够做到一个呃完全无状态这么一个一个能力。啊,然后嗯,这个是北极星的一些控制台,那大家可以看到,嗯,从从可以看到侧边栏上,其实把治理能力啊,像配置中心,把一些可观热性啊,全部都是在放在一个控材内部啊,人类是一个网康这么一个概念啊,对于用户来说体验是肯定是相比于各个独立的一个控制台,页面可能相对更更加的统一,更加的整洁,对。
07:08
然后也做了相对完善的一些权限的一些控制啊之类的。然后嗯,这里给大家介绍一下,就是北极星并不是说一个完全呃高孵化的这么一个产品,其实在腾讯内部是把北极作为一个标准的一个服务注册,服务注册中心以及服务治理中心啊,从这些数据上可以看到,嗯,基本上腾讯公司内部所有的业务,90%的业务都已经接入北极星去做统一的服务注册啊等等,然后注册节点数也是量子是非常大的,那从这点可以看出就是其实我们这个是在腾讯内部经过长时间的一个孵化,长时间的打磨这么一个结果,并不是说完全一个全新的一个东西。然后那接下去就第二部分给大家介绍一下。呃,SP cloud探测的,如果大家是做Java开发的话,那对SP cloud肯定是不不陌生的,那总结一下就是说SP cloud它它以极低的使用门槛,以及非常活跃的社和生态啊,那然后在R这块是通过P的,TP是具有非常好的一个性,所以呃,在Java领域的话,就是是我我我个人认为啊是目前是嗯。
08:23
最流行的一个开发微服务开发框架,对在国内的话,其实有非常多的公司都在使用啊,然后嗯,Spring的话,其实顾名思义啊,就是呃,主要是用来。去配呃腾讯自己开源的些组啊,然后腾讯云上面的一些一些服务啊,然后对接cloud的能力去到频cloud,那能够方便用户快速的呃本的去使用腾讯自己腾讯这开源的一些一些一些框架一些组件,或或者说腾讯的这么一些产品。所以呃,腾讯频就这这么来的啊,然后给大家看一下spring color目前spring cloud的目前的一些能力啊啊目前的话呃,可能还比较出色的阶初始的一个间段,主要是对接了北极星,就第一步第一趴给大家介绍北极星的一些能力啊呃,可以简单的看一下,就是从左到右往上,呃,最核心的服务注册发现对吧,然后第二个就配置中心。
09:25
动态配置下发的一些能力,第三块就是服务路由,服务路由这一块的话,可能是其他的一些spring的套件不具备的,是我们在呃,因为其实服务由主要是针对流量,流量管理这一块的能力,那其实在公司内部需要比较多的,用的比较多,比如呃,开发阶段需要用一些特性环境的能力去支持多开发环境的一个能力,然后像发布阶段需要做一些维度发布啊,或者说其资去发布,蓝绿蓝绿发布啊等等,在生产环境可可能需要通过流量的一些单元化,单元化流量的能力啊,像一些AB test的这些能力,对,所以我们把这些能力都集成到了里面啊,然后提供了几种路由插件,通过路由的能力,能够比较快速的在公司内部达到某一个特定场景的,呃,一个流量的一个治理的能力,嗯。
10:19
然后再往下就是大家使用的比较多的一个限流能力,然后我们的目前的限流的话,主要是针对接口的,其实公司大部分情况下是针对接口的限流,然后我们在接口流这块能够做到零清入的,只要只要依赖,只要只要依赖依赖了SP limit这么一个start,那就就能够在页面上配置比较灵活的规则,就能够对你对当前这个应用程序暴露的所有的接口进行一个流量治理的一个能力,所我几乎是一个完全零清度的这么一个呃接入啊。嗯,然后也同时有一些垄断保护啊,还有一个原数据传递,元数据传递,这个给大家简单介绍一下就是,嗯,其实在很多时候在一个列有一个转账,一个转账的一个业务流程,对吧?那其实有非常多的整个链上有非常多的服务,那有些呃,有些标签是需要做全列透传的,有些标签是要做一跳的一个透传啊,所以我们也内置了一个呃,Made data transport这么一个start去帮大家比较简单的呃,能够去做一些标些透出的这么能力。
11:26
然后底层框架服务框架的话,嗯,其实就是常见的这两种形式。嗯,接下去的话就给给大家演示一下嗯,几个能力吧,啊第一个就是呃,刚才也有提到的就是。特性环境啊,嗯,这个环境其实这个图其实大家应该在某些网站上也介绍比较多啊,给大家介绍一下就是,嗯,就是如果比如我们一个公司有一个测试环境,那如果只有一套测试环境的话,呃,就会当当几个迭代,或者当几个开发需求同时进行并发,并行的开发的时候就会出现。
12:05
测试环境增强的这么一个情况,那那很多公司说呃做法就是如果一套环境不够,那我就多搞几套环境呗,对吧,那就是拉了很多很多的环境,但是每个环境如果服务,当服务的量比较多之后,你拉一套环境其实成本是非常非常高的,需要把一个呃所谓的链入上,每一个服务都要都要部署起来,你才能够串起来,那这样的成本是非常非常高的啊,既耗资源又耗时间,很多时候还是搞不定啊。所以呃,大部分公司的一个情况,呃一种做法就是比如做幅图所所挂就是举个例子,比如假设有三个服务,Front跟back end,一个迭代,一个发过程中,Front需要去做一个调,那我只需要拉一个分支环,就或者叫特性环境,那在这个环境内部,我只需要部署front service跟background service,那front service去调service的时候,因为呃,分支环境内部是没。
13:06
没有middle service这个环这个服务的,所以它会到机械环境,然后机械机械环境middle service去调back service的时候。啊,那它根据嗯分支环境就是因为上游是从分支环境的装设备过来的,所以它会把到这笔流量会优先调到调回到分支环境的大概的service,那这样的话就能够呃共享,也就是说每个分支环境可以共享机械环境的某些服务,那能够做到最小化的一个部署啊那那接下去就给大家去演示一下这这个这个场景啊,就实际就是完全按照这幅图去呃去部署的。然后这个的话,其实呃,也在spring项目里面会有个example,然后这面great release的,然就对应的呃,有这么些服务,然后我现在起一下。
14:13
大家稍等。快。呃,然后呃,在启动过程再给大家介绍一下,就是呃,我们这边还有一个呃规则路由,从图中可以看到URD等于零的时候,我们期望user RD等于零,它是把这个请求打到机械环境,然后user的IRD等于一,把这个请求是打到分支环境啊。那通过通过我们呃,视频content的路由能力,有个规则路由的能力是很容易做到这个点的,我可以给大家先看一下。
15:06
嗯,先看一下那个控制台上配置的一个规则。都退的。我看到一个机器。啊,现在启启动完了,然后给大家调动看一下。嗯。
16:00
那可以看到user r等于零的时候,它是叫green green,然后当user r等于一的时候。那它就是布布就能够实现,呃,刚才这幅图的这么一个效果啊,这个要配合配合一个呃规则去做生效的。然后这些DEMO其实都都在视频项目里面是是有的,然后大家可以直接去跑一下就可以了,大家也可以自己体验一下。然后第二个给大家演示的是,呃。配置中心的一个动态推送的一个能力。那其实呃,这个大家应该也做过业务开发,其实也不陌生,经常会依赖于配置东西去做一些动态的一些配置,像业务开关,一些业务参数啊,一些数据源的一些配置,或者说动态去调整日志的级别,那SP它也是深度集成了SP cloud或者说SPBOO的呃配置机制,那是能够让用户无缝的使用spring的一个呃动态配置一个能力,那接下来就也给大家演示一下。
17:08
其实也是在下面有个conig的一个example。然后我们直接。那呃这里给大家介绍一下,如使用SP,它使用还是非常简单的,只需要比如呃使用配置上场景只需要依赖一个呃把。把con con start引入进来,然后在配置文件里面配置啊,配置北极星的一个服务地址就可以了,就这么简单,然后嗯,在大部分常见情况下,其实大家如果了解spring cloud的话,那spring BOO它会。默认的会加载resource下面的application点压嘛,以及或者application active点压嘛,这些配置文件嘛,对吧,所以在呃,SP在实现对接,呃,就是SP在对接能力的时候是完全遵循是跟put这套机制的啊,你看我们当前的这个应用名是power con.example然后我在代码里面呃,定义了一个con,一个teacher,然后有name跟这两个属性,那到我们的控制台上面来呢,就有个这里个配置分组。
18:21
然后这这就是我刚才的那个,呃,应用名对吧,然后我再。Application点因这个就是你比如你是从呃自己的视频库的应用迁移到北极星上面配置中心上面来的时候,那你只需要把你已有的项目里面的配置文件都把它挪到这里来,就就能够直接的啊完成迁移啊。然后你看我我把这个,嗯,咱们我们现在在控制台上面就配了这么这配置文件,然后我现在起起一下应用。
19:02
啊,现在就启动成功了,然后我这边这个DEMO里面也搞了一个简单的一个controlr就能,呃,这个这个接口的话,就能够打印这个破这么一个对象,我现在调调用一下。啊,就调一个的这么一个接口。你看其他就能够展示张三171对吧,那这时候我到控制台上把这个给改一下,比如他的年龄改成18岁。然后保存一下,然后再发布一下。啊,做一个切,然后然后我们再看一下,通过页面去调一下,诶,这边就变成18了啊,所以这个是最核,嗯,给大家演示了一下最核心的一个配置能力啊,另外的话就是我们在控制台上有一个点做的比较相对做的比较好的就是呃,因为大家其实在实际项目开发中也经常会发现,呃,项目里面的配置文件如果多了的话,其实不利于管理的,所以我们在在控制台上面我们做了一个呃一个优化了一个方式,就是如果你的文件名可以通过反斜杠的方斜杠的方式,可以去做到一个目录的一个划分,举个例子,比如一个配置文件叫common。
20:13
动词点什么意思那。那在页面展示的时候,它就可以自动去按按照目录结构去做展示,那这样的话,大家可以按照模块或者按照不同的组件,可以去更好的去管理你的配置文件啊,就是配置中心,我认为我认为是两个最核心的能力,第一个能力就是配置管理的能力,第二个就是配置推送啊,灰度推送这么一个动态下发的一个能力,所以这个还是比较重要的,我个人觉得啊。然后嗯,最后一个话就给大家演示一下。呃,泄流的能力。啊,泄流应该也是呃,大家使用的比较多的一个呃,服务自我保护的一个能力,然后刚才也提到就是北极SP cloud探测接入泄流是基本上可以做到完全无侵入的啊给大家做一下演示。
21:03
同样的也是在项目里面有一个。呃,有一个limit这么一个模块啊,这面定义了一个一个扩一的这么一个服务,然后呃,接入接入北极星的系流的话,同样的也只要只需要做两部分事情,第一部分就是呃引入引入跟limit这么一个start啊,然后第二个的话就是在配置文件里面去配置北极星的一个服务啊,这个服务地址主要是用来接收在北极星服务控制台上面配置的一些限流规则啊,通过就可以动态的下发限流规则啊。然后在代码层面的话,其实就完全是无侵入的,就比如我这里定义了一个business这么一个接口,对吧,然后其他的都是,呃,都是业务代码,其实完全是不用侵入,不用去写一些北极线SDK,呃,SP的一些相关的一些代码。同样的,我把这个服务给起一下。
22:01
然后。啊,现在提起来,然后给大家看一下如何去配,针对这个服务去配置一些规则。大家可以这个些服务可以,大家也可以看到在一个服务上面可以配置路由熔断限流啊等等一些规则啊,然后你看我这边配到一个规则给大家简单看一下,就是呃,针对business-info这个接口,然后呃,对带有以下请求的标签啊,那这个就我们定义一套表表达式,这个表达式的意思就是就query queryter里面有个name的字段,如果name字段等于张三的时候,我做一个30秒四次这么一个限流的一个呃,设置啊。然后我现在给大家演示一下,我去问一下。
23:00
确认。那我现在有一个name等于李四,那这样的话,其实是不会对这个接口去进行限流的,这有个计数器访问四次,它并没有去进行限流,那我把它的内改成张三。等一下访问试试。访问第五次的时候,他就他就被限流了,然后限流这些返回的呃,异常异常信息都是可以可以自定义的,就比我这里可以定义一个一一段HTM的一个一段代码,对,然后对用户更可以更加的友好啊,可以这里配个tips对吧?啊,就是对用户来说是给一个友好比较友,相对友好的一个提示,那然后其实这边比较灵活的就是我们定义了一些表达式啊,从刚才也是的是通过quater的方式去做一些参数。对某些参某些请求去做,呃一些限流啊,我们也定量可以从handle里面,或从cookie里面,或者通过一些呃,URUR2等等一些方式去比较灵活的去做一个请求,一个参数解析的一个能力,这样的话对用户来说是比较比较我我个人体比较好的一个方式,就用户自己不要。
24:15
不需要自己去写一些,呃,接入层代码啊,完全可以通过规则,通过表,通过规则的方式就能够达到,呃,比较灵活的一个限流,一个场景,对。呃。然后呃,由于时间关系,我就给大家也是这这三个场景,然后所有的DEMO展三部项目里面都是比较详细的,大家有兴趣都可以去看一下。然后我今天的话,呃,主要就是给大家介绍一下北极线及视频Co的,最后的话给大家演示了一些视频Co的快速记录,呃呃,快速去使用一些服制的一些能力的一些example啊。如果大家有问题的话,可以可以提问,谢谢。
我来说两句