三分钟上手ssh命令批量执行工具ansible
ansible作为目前批量linux机器远控工具的老大、其易用性、管理成本低等远远超过了同类的Fabric等工具。
准备测试机器,这里就拿已有的kubernetes的机器做测试,机器和ip分配参考:java微服务 k8s生产环境搭建, 注意下面案例中的k8s机器的ip段已经改成 192.168.10,机器列表如下
机器 | ip |
---|---|
K8s-ha-deploy | 192.168.10.140 |
K8s-ha-master1 | 192.168.10.130 |
K8s-ha-master2 | 192.168.10.131 |
K8s-ha-master3 | 192.168.10.132 |
K8s-ha-node1 | 192.168.10.135 |
K8s-ha-node2 | 192.168.10.136 |
K8s-ha-node3 | 192.168.10.137 |
安装ansible
执行下面的命令在部署机上安装ansible
pip install pip --upgrade -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
pip install --no-cache-dir ansible -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
也可以使用docker一键启动
alias ansible="docker run --rm --name ansible -v ${HOME}/.ssh/config:/home/ansible/.ssh/config:ro -v ${HOME}/.ssh/known_hosts:/home/ansible/.ssh/known_hosts:ro -it williamyeh/ansible:alpine3 ansible"
ansible --version
使用wireshark抓包读懂tcp三次握手,四次挥手
tcp三次握手和四次挥手的描述很多,但是感觉大部分文章看下来很难具象化这个过程,下面使用这个wireshark抓包工具,通过抓取到的数据包来理解一下,能够从另一个角度理解tcp三次握手了
完整案例代码已上传github: https://github.com/neatlife/mytcp
wireshark下载地址:https://www.wireshark.org/download.html
创建案例项目
可以在idea中创建一个maven项目,创建用来测试3次握手和4次挥手的两个模块,创建模块在idea右键菜单里就有:
把握手和挥手分开测试是为了防止客户端在发送过程中,服务端就提前关闭了,然后挥手的部分包可能会丢掉,这个丢包的效果可以自行尝试
编写握手客户端和服务端
服务端
建立一个socket服务器,并在8881端口上监听,核心代码如下:
ServerSocket socket = new ServerSocket(8881);
socket.accept();
TimeUnit.SECONDS.sleep(2);
socket.close();
仿金蝶,物料库存系统设计与实现思路
公司最近也在开发库存系统,就拿业界比较成功的金蝶来分析学习,提升自身的业务水平
库存系统最重要的就是入库与出库,成本与利润的计算
入库操作核心流程
出库操作核心流程
在spring boot中集成微服务网关系统Spring Cloud Zuul
spring cloud zuul由大名鼎鼎的netflix公司开发,已经超越spring cloud gateway微服务网关系统,成为了Spring Cloud全家桶里排名第一的微服务网关系统了
网关作为所有应用系统的最前端,可以提供以下的价值
- 为后端微服务系统提供统一的入口
- 为后端微服务系统提供统一的授权机制
- 为后端微服务系统提供统一的认证机制
- 为后端微服务系统api提供统一签名校验机制
- 为流量入口添加日志记录
- qps统计
- 限流
完整代码已上传GITHUB,参考:https://github.com/neatlife/myzuul
创建网关项目
可以在https://start.spring.io/创建新的spring boot项目作为网关的骨架,比如
注意需要把Zuul网关组件添加进来,也可以手动添加,pom依赖如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
三分钟把spring boot打成war包部署到tomcat中
虽然一般微服务都是把spring boot项目打成jar直接启动,但是war包作为经典的项目启动方式,是有必要掌握的。
完整项目代码已上传github:https://github.com/neatlife/mywar
写作花费了作者大量时间,求赞,求关注 _(:з」∠)_
准备案例项目
可以直接拿现成的spring boot项目进行修改,也可以在https://start.spring.io/创建一个新的案例项目,比如:
如果是在start.spring.io上创建的新项目,需要把web组件加到项目里,这个编写测试接口会用到web组件里的控制器。
在spring boot中三分钟上手apache顶级分布式链路追踪系统skywalking
skywalking在apache里全票通过成为了apache顶级链路追踪系统
项目地址:https://github.com/apache/skywalking
官方文档:https://github.com/apache/skywalking/blob/master/docs/README.md
虽然官方文档很全,但是中文文档目前还没完全翻译过来,研究文档需要花费一些时间,下面作者整理总结了官方文档,可以帮助读者快速上手
skywalking拥有丰富的三方库追踪支持,参考: apm-sdk-plugin
常用的组件比如dubbo, httpclient, rocketmq, jdbc, hystrix等都已官方支持了
为了快速启动项目,会使用docker技术
下载编译
官方文档:https://github.com/apache/skywalking/blob/master/docs/en/guides/How-to-build.md
下载源码,并下载依赖的git子模块
git clone https://github.com/apache/skywalking.git
git submodule init
git submodule update
执行编译
mvn clean package -Dmaven.test.skip=true
思普瑞特,小票打印机和标签打印机java网络驱动设计与实现
网络打印走的socket连接,主流的java, php, c, c#等语言都支持socket,所以实现打印机的网络打印几乎是和语言无关的
打印机默认端口是9100
使用socket连接上打印机后,将打印内容按照打印机的指令进行编码后调用send就可以打印了
协议文档
小票打印机和标签打印机走的协议不同,所以各自都有一个协议,小票打印机使用的是esc协议,标签打印机使用的是tsc/tspl协议
小票打印机esc协议文档:
- http://sprinter.com.cn/img/up/data/1492073298104phpDo100.pdf
- https://blog.csdn.net/feng88724/article/details/17474351
- http://www.sprt.cc/img/up/data/1499134995151phpDo100.pdf
标签打印机tsc/tspl协议文档:
可以看到打印机支持的指令非常多,下面找到常用的指令实现我们的打印目的
在spring boot中消息推送系统设计与实现
推送系统作为通用的组件,存在的价值主要有以下几点
- 会被多个业务项目使用,推送系统独立维护可降低维护成本
- 推送系统一般都是调用三方api进行推送,三方api一般会有调用频率/次数限制,被推送的消息需要走队列来合理调用三方api,控制调用的频率和次数
- 业务无关,一般推送系统设计成不需要关心业务逻辑
核心技术
- 消息队列
- 三方服务api调用
- 安卓app推送
- 苹果app推送
- 微信小程序推送
- 邮件推送
- 钉钉推送
- 短信推送
消息队列选用阿里云提供的rocketmq,官方文档:https://help.aliyun.com/document_detail/55385.html
推送时序图
php微服务,在laravel中集成nacos配置中心
php微服务的资料一直比java少,不过java微服务的一些组件php也是可以复用的,就拿配置中心这个组件举例,来看看在php里如何使用😀
配置中心作为微服务不可缺少的关键组件,下面就在laravel中集成配置中心nacos
nacos是由阿里巴巴开发的微服务配置中心,参考:nacos
下面用到了由作者写的php的nacos客户端php-nacos: https://github.com/neatlife/php-nacos
欢迎star,欢迎pr(求star, 求star, 求star)
启动nacos配置中心
可以使用docker启动
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
docker-compose -f example/standalone-derby.yaml up
然后打开 本机ip:8848端口查看效果,nacos默认的登录用户名密码都是 nacos
在spring boot中3分钟上手阿里巴巴服务熔断系统sentinel
一直在用hystrix做熔断降级,但是无奈hystrix官方已经不再维护了,sentinel背后是阿里巴巴公司,并且一直在维护sentinel,所以先了解下,hystrix不够用时,可以换成sentinel
并且特性丰富,这里就使用如下两个核心功能
- 熔断
- 流控
启动Sentinel控制台
sentinel的控制台是由spring boot开发,特殊需求可以修改源码定制,源码参考:sentinel-dashboard
可以使用docker一键启动控制台
编写sentinel-dashboard的Dockerfile
FROM openjdk:8-jdk-alpine
ADD https://github.com/alibaba/Sentinel/releases/download/1.6.0/sentinel-dashboard-1.6.0.jar /sentinel-dashboard-1.6.0.jar
ENTRYPOINT ["java", "-Dserver.port=8080", "-Dcsp.sentinel.dashboard.server=localhost:8080", "-Dproject.name=sentinel-dashboard", "-jar", "/sentinel-dashboard-1.6.0.jar", "-Dfile.encoding=utf-8"]
构建sentinel-dashboard镜像:docker build -t sentinel-dashboard .
然后启动
docker run --name sentinel-dashboard \
-it --rm -p 8719:8719 -p 8780:8080 sentinel-dashboard
其中8080是sentinel web控制界面端口,8719是sentinel应用端和控制台通信端口,参考配置控制台信息
打开 本机ip:8780 查看效果,默认的用户名密码都是 sentinel
在spring boot中3分钟上手RPC框架Dubbo
官方提供的demo太多,内容也很详细,资料也多,导致不易快速上手,以下是我根据官方文档整理出来的快速上手步骤
首先rpc调用都需要有注册中心,zookeeper, nacos,redis等都可以拿来作为注册中心
这里为了演示方便我们还是拿经典的zookeeper做演示
完整代码已上传github:https://github.com/neatlife/my-dubbo-spring-boot
下载后启动zookeeper即可运行
获取一个可用的zookeeper实例
可以使用docker启动zookeeper,比如 docker-compose-single.yml
version: '3.1'
services:
zoo:
image: 31z4/zookeeper
restart: always
hostname: zoo1
ports:
- 2181:2181
然后执行docker-compose -f docker-compose-single.yml up -d
命令启动zookeeper实例
Copyright © 2015 Theme used GitHub CSS. 访问人/ 次