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 ...
NetTask - 基于.netcore的开源Web任务管理器
NetTaskNetTask是一款基于.net core3.0开发的的通用任务管理系统,将任务逻辑和任务调度彻底分离,并可通过Web界面远程监控和管理任务。.Net Core 3.0可回收程序集加载上下文AssemblyLoadContext新增了Unload方法,真正实现了程序集的热插拔。
用这个有什么好处
不需再关注任务调度,只需编写任务执行的逻辑代码,由任务管理器统一调度;
在任务中打印日志,可通过Web界面中实时查看任务执行情况;
无需再登录服务器,可直接将任务上传至服务器,随时启动和关闭任务;
多种任务调度方案,一般任务、定时任务,循环任务、定时循环任务;
灵活的任务配置,可随时远控修改配置,如数据库连接字符串更改;
拥有多种角色控制,满足各类人员需求,避免无关人员误操作。
项目说明
NetTaskManager是整个任务调度的核心;
NetTaskInterface提供任务接口,编写的所有任务都必须实现该接口,才可被任务管理器识别,是NetTaskManager和Task的桥梁;
NetTaskServer是NetTask的主程序,提供Web服务,通过HTTP协议操控N ...