SpringCloudAlibaba入门系列(3) - 服务治理组件Nacos
摘要:服务治理组件Nacos的介绍及应用,它包括了服务注册中心(discovery)和服务配置中心(config)。
3.1 服务治理介绍先来思考一个问题
通过上一章的操作,我们已经可以实现微服务之间的调用。但是我们把服务提供者的网络地址(ip,端口)等硬编码到了代码中,这种做法存在许多问题:
一旦服务提供者地址变化,就需要手工修改代码
一旦是多个服务提供者,无法实现负载均衡功能
一旦服务变得越来越多,人工维护调用关系困难
那么应该怎么解决呢, 这时候就需要通过注册中心动态的实现服务治理。
什么是服务治理
服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
服务注册:在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成一张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
服务发现:服务调用方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。
通过上面的调用图会发现,除了微服务,还有一个组件是服务注册中 ...
SpringCloudAlibaba入门系列(2) - 微服务环境搭建
摘要:通过使用电商项目中的商品、订单、用户为案例进行实例演示。
2.1 案例准备2.1.1 技术选型maven:3.3.9数据库:MySQL 5.7持久层: SpingData Jpa其他: SpringCloud Alibaba 技术栈
2.1.2 模块设计springcloud-alibaba 父工程shop-common 公共模块【实体类】shop-user 用户微服务 【端口: 807x】shop-product 商品微服务 【端口: 808x】shop-order 订单微服务 【端口: 809x】
2.1.3 微服务调用在微服务架构中,最常见的场景就是微服务之间的相互调用。我们以电商系统中常见的用户下单为例来演示微服务的调用:客户向订单微服务发起一个下单的请求,在进行保存订单之前需要调用商品微服务查询商品的信息。
我们一般把服务的主动调用方称为服务消费者,把服务的被调用方称为服务提供者。
在这种场景下,订单微服务就是一个服务消费者, 商品微服务就是一个服务提供者。
2.2 创建父工程创建一个maven工程,然后在pom.xml文件中添加下面内容
1234567891011 ...
SpringCloudAlibaba入门系列(1) - 微服务介绍
摘要:系统架构的演变与微服务介绍
1.1 系统架构演变随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。
从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构—->垂直应用架构—->分布式架构—->SOA架构—->微服务架构,当然还有悄然兴起的Service Mesh(服务网格化)。
接下来我们就来了解一下每种系统架构是什么样子的, 以及各有什么优缺点。
1.1.1 单体应用架构互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,这样可以减少开发、部署和维护的成本。
比如说一个电商系统,里面会包含很多用户管理,商品管理,订单管理,物流管理等等很多模块,我们会把它们做成一个web项目,然后部署到一台tomcat服务器上。
优点:
项目架构简单,小型项目的话, 开发成本低
项目部署在一个节点上, 维护方便
缺点:
全部功能集成在一个工程中,对于大型项目来讲不易开发和维护
项目模块之间紧密耦合,单点容错率低
无法针对不同模块进行针对性优化和水平扩展
1.1.2 垂直应用架构随着 ...
Kubernetes的简单介绍和基本原理
Kubernetes又称k8s,因为首字母k和尾字母s之间正好有8个字母,所以简称k8s。k8s是由Google公司开源的一个容器编排引擎,用于自动化部署以及可伸缩的应用容器化管理。
Python中的模运算
关于取模运算,你真的了解多少?负数的模运算呢?
二分查找的通用模板
二分查找适用于对于有序数组的精确查找,例如从一个有序数组中找到指定元素的索引,可将时间复杂度从普通枚举的$ O(n) $降至$ O(log n) $,前提是数组必须是有序的,否则是没有办法使用二分查找的。二分查找的思想虽然简单,不过在实现过程中会有很多细节问题需要注意,例如判断循环是用left < right还是用left <= right,right是取最右的元素还是取数组的边界。本文想通过七个例题,约定一种规则或是模板,从此让写二分查找不再出现模棱两可的局面。
规则约定
left统一采用数组最左端即下标为0,right采用数组最右端的元素(非边界),这样二分查找的范围是一个闭区间[left,right],包括扫描两端的元素;
while中统一使用left<=right,如果不加=,退出循环的条件是left==right,而我们采用的是[left,right]的闭区间,left和right相等时依然是有效区间,所以left==right时应继续进入循环查找,否则会导致元素遗漏;
既然采用[left,right]闭区间,当确定mid不是查找元素时,那么将数组一分为二 ...
Google经典面试题-扔鸡蛋
这是一道Google公司的经典面试题,有多经典呢?经典到Google公司已经不用它做面试了!
问题假设有一栋大楼有100层,其中有1层比如F层,你从这一层或者比它低的层往下扔鸡蛋,鸡蛋不会碎,但是从比F层高的楼层开始扔,鸡蛋一定会碎。也就是说F层是个临界点,你的任务就是找到F层,同时给你2个鸡蛋,你能最少实验多少次(或者说扔多少次鸡蛋)能找到这个F层。
解答这个问题不是简单的二分查找问题,假如给你无数个鸡蛋,确实可以采用二分查找的方式,比如先从50层开始扔,如果碎了说明F层在50层之下,然后再从25层继续。。。如果没碎,说明在50层以上,下一个从75层开始扔。根据$ \log_2 100 \approx 6.64 $,说明只要7次一定能找到这个F。但是现在只有2个鸡蛋,假如第一个鸡蛋在50层就碎了,那么你只能知道F在1到50之间,但是只剩下一个鸡蛋了,你只能从1楼开始一层一层往上试,因为你不能让蛋碎掉,一旦碎了就无法后续测试了。假如F正好是49,也就是说你一直试到49都没有碎,那么你总共扔了50次蛋才得到结果。有没有办法可以实验最少次,一定能找到结果。答案是有的,比如这题的答案就是1 ...
生命游戏的模拟代码
问题根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机。
给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态:1 即为活细胞(live),或 0 即为死细胞(dead)。每个细胞与其八个相邻位置(水平,垂直,对角线)的细胞都遵循以下四条生存定律:
如果活细胞周围八个位置的活细胞数少于两个,则该位置活细胞死亡;
如果活细胞周围八个位置有两个或三个活细胞,则该位置活细胞仍然存活;
如果活细胞周围八个位置有超过三个活细胞,则该位置活细胞死亡;
如果死细胞周围正好有三个活细胞,则该位置死细胞复活;
根据当前状态,写一个函数来计算面板上所有细胞的下一个(一次更新后的)状态。下一个状态是通过将上述规则同时应用于当前状态下的每个细胞所形成的,其中细胞的出生和死亡是同时发生的。
示例:
输入:[ [0,1,0], [0,0,1], [1,1,1], [0,0,0]]输出:[ [0,0,0], [1,0,1], [0,1,1], [0,1,0]]
代码12345678910111213 ...
十大经典排序算法的介绍及实现
编程排序可谓程序算法的第一课,本文介绍了十大经典排序算法的各自特点,适用场景以及Python代码实现。
如何从B站下载大电影
首先你要确保视频是能播的,能播的都可以下载,不过得采用一些技术手段,所以有些会员才能看的电影,你得先充个会员。
方法一:手机缓存
直接在手机APP上缓存要看的电影,以安卓手机为例,缓存的视频在Android -> data -> tv.danmaku.bili -> download目录下。
缓存完毕后,你会在这个目录下找到audio.m4s和video.m4s这2个文件,分别代表音频文件和视频文件,将这2个文件导入到电脑。
将audio.m4s的后缀改为mp3,将video.m4s的后缀改为mp4,然后启动格式工厂这个软件,选择混流模式,将音频和视频文件合并成一个完整的mp4。
不过对于有些资源来说,即使是会员也不能缓存,有只能在线观看的限制,这个时候可参考方法二。
方法二:网络抓包用Chrome浏览器打开某个电影的播放界面,用f12抓包会找到很多m4s格式的数据包,这些就是视频流和音频流,通过分析可以发现30080.m4s代表着视频流,30280.m4s是音频流,怎么知道的,通过实验一些视频,判断流大小得出的结果。
找到文件流的大小随便打开一个30080.m4 ...