Alibaba Sentinel 微服务流量治理组件的使用与原理解析
Sentinel 介绍这里我直接引用官方的一段话来介绍一下 sentinel。随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。通过官方的描述,我们可以知道这是一个为了保护系统稳定性和微服务质量而设计的组件,用来实现流量控制,防止系统过载,保证微服务之间的稳定交互。这里我主要挑几个重点特性来介绍一下。 流量控制:对系统的入口流量进行限制,防止系统因为过大的流量压力而崩溃,例如我们可针对某一个接口进行流量设置,1 秒内只允许 50 个请求进入,超过这个阈值,额外的请求会被拒绝掉。 熔断和降级:如果系统的某个服务出现问题,Sentinel 可以立刻断开这个服务,防止错误进一步扩大。同时,也可以实现服务的降级,在系统压力大的时候,停掉一些非关键服务,让系统的资源集中在优先度更高的任务上。 实时监控:在 Sentinel...
京东的线程编排框架的认识与使用
前言在项目中对于多线程的使用还是非常普遍的,像并行、串行、优先级顺序执行,还有一些方法涉及到上一个方法的返回值等等。如果我们把人力放在这上面显然是有点多余的,这次给大家介绍京东零售使用的线程编排框架 -asyncTool 项目引入引入这里介绍 2 种方法,一种是 maven 引入,一种则是直接引入源码,源码结构和层级都很清晰,代码量也很少。这里推荐源码引入,不过根据具体情况具体分析,大家自行选择 maven 引入 这里因为我是源码引入的,所以直接放官方的 maven 引入方法 外网请使用 jitpack.io 上打的包 先添加 repositories 节点 123456<repositories> <repository> <id>jitpack.io</id> <url>https://jitpack.io</url> </repository></repositories 然后添加如下 maven 依赖 12345<dependency> ...
关于如何让 static 修饰的字段动态获到取 nacos 的值
前言在平时的开发中,我们一般使用 nacos 来作为项目的注册中心和配置中心,其中配置中心的动态化配置又是我们经常要用到的设置。配置一些经常发生变化的值特别好用,不需要重启项目,不需要修改代码,只需要在 nacos 的配置文件修改完成,保存一下就可以完成动态配置。这次我想专门记录一下对于 static 修饰的值如何获取到值与动态的刷新该值。 正常使用案例首先我们先看一下最为经典的用法,也就是非 static 字段的使用,我首先在 nacos 中了如下这么一段配置。 在代码中我是通过下面代码获取到 nacos 配置的值,我个人习惯用 @ConfigurationProperties 指定前缀并搭配 @Configuration 来使用,通过 set 来赋值,同时加一个注解 RefreshScope 来开启动态刷新。 12345678910111213@Data@RefreshScope@Configuration@ConfigurationProperties(prefix = "sora")public class NacosVo implements...
记一次线上使用 arthas 排查 Bug 的经验
最近几天公司的服务器经常出现接口调用超时的情况,接口的状态一直是 pending 的状态,起初以为是程序的堆栈空间爆掉了,重启了项目并不好使,发现问题并没有这么简单,好在之前自己用过 arthas,想起了这个工具,于是打算重拾 arthas 完成这次的 bug 排查。 首先去官网下载了最新的 arthas,因为我用的 java 程序启动的,直接把整个包拖到服务器中,再使用 java -jar 启动起来就可以。之后会出现一排的 java 服务,前面会有很多序号,我们选择需要调试的 java 程序序号就可以进入该程序的内部,准备开始调优。 进入到下面这个页面就表示我们成功使用 arthas 连接到了 java 程序内 arthas 官网命令列表 https://arthas.aliyun.com/doc/commands.html 我先说几个常用的命令 dashboard 查看控制台,这个命令可以让我们快速的浏览目前的程序情况,包括线程的状态,新生代老年代以及运行 java 程序的系统信息等等 jvm 查看 jvm...
10 分钟将本地项目部署到 Docker
前言很多公司目前发布上线的时候还是手动将 jar 包打好,然后用 Java 命令行去启动,包括我现在所在的公司。这样做无疑是加大了人工成本,这次我打算利用 Idea 中的官方 Docker 插件,快速将本地项目发布到服务器的 Docker 并部署,同时集成后续持续更新的操作 安装 Docker 插件首先我们得确保 Idea 中具有 Docker 插件,在插件列表中搜索 Docker,如果有下方这个插件我们则继续 DockerFileDockerFile 是 Docker 中构建镜像的脚本文件,包含一系列的指令和配置,用来描述如何构建和配置 Docker 容器,我先简单介绍一下 DockerFile 中的常用命令,以命令(示例):详情的格式进行介绍 FROM(FROM java:7):基础镜像,构建的起点 COPY(COPY file /usr/local):将本地文件复制到镜像中的指定位置 ADD(ADD pom.xml/usr/local):将本地文件添加到 Docker 镜像中,这里要注意和 COPY 的区别,如果 ADD 移动的是压缩文件则会自动解压缩,COPY...
在项目中引入 ShardingJDBC 并整合 MybatisPlus
ShardingJDBC 介绍SharingdJDBC 是 ShardSphere 中的一种实现方式(ShardingSphere-Proxy 是代理,相当于一个中间件,把所有的请求统一发到 Proxy 上,在 Proxy 上对请求进行处理;最后一个是 Sidecar,相当于提供一个大网,将所有的数据库织起来,一般用于微服务中)它一个轻量级的 Java 框架,集成在程序里,通过 jar 包的方式提供服务,并且支持很多 ORM 框架,比如我们经常使用的 Mybatis、JPA、Hibernate 等等 ShardingJDBC 的一些概念逻辑表:我们一般把结构和逻辑一致的表称为逻辑表,例如 user 表我拆分为了 user01 和 user02,除了名字以外,其他都一样,那么 user 就是一张逻辑表。 真实表:真实表就是真实存在的表,上面的 user01 和 user02 就是真实表 广播表:公用的一些表,相当于抽象版的” 工具类” 分片键:我们分表是按照哪个字段去分,这个字段就是分片键 分片算法:确定分片键后要如何去计算到具体的表。常用的有取模运算、hash 算法以及范围算法...
MySQL 亿级数据量查询优化方案
背景最近业务上有一个需求,涉及到两张表的联查,条件也只有三个。是不是听起来很简单?但这两张表一张是 2.5 亿,一张是 4.5 亿。加起来将近 7 亿的数据。之前我自己了解的是 MySQL 单表数据建议存储量也就是 2000w,所以听到这两张表的大小时也很震惊。但凡事都得有个解决方案,在使用了索引等工具,把这次的过程分享一下。 优化方向首先我们得先有一个方向,按照性价比从高到低分别是 索引的建立和优化 ->SQL 语句的优化 -> 表结构的优化 -> 硬件层次的优化。索引是最简单而且效率最高的一种手段,我们一般在优化 SQL 的时候都会用到,再下来是 SQL 语句本身,只展示出需要的字段,以及 SQL 语句本身是否走了索引,索引是否失效等等,关于 SQL 优化理论可以看我这篇文章 MySQL 理论 再往下是表结构的优化,首先是数据类型的选择,例如年龄,很多人用的是 int 类型存储,但完全可以使用 tinyint 来代替,将其从 4 字节变为 1 字节,同理还有 char 和 varchar,varchar 是可变字符,用多少占多少,而 char...
基于 docker 的 ELK 的部署安装
前言我们在项目中排查错误第一时间会去查看日志,日志可以说在开发中起到了很重要的作用。目前很多项目使用的日志收集系统也主要以 ELK 和 EFK 这两种为主(EFK 中 F 为 Filebeat,和 Logstash 相比占用资源更少,并且侵入性低,下次有机会也写一篇。又给自己挖了一个坑)。这次还是以 ELK 为主,来教大家从 0 来搭一套 ELK 的日志收集系统。同样,本次我们也使用 Docker 来完成 ELK 是什么?ELK 是由三个开源的中间件组成。是一套分布式日志收集解决方案。其中 E 指的是 Elasticsearch,一个 NoSQL 数据库,也是我们常用的搜索引擎,主要负责存储日志,L 指的是 Logstash,主要职责是收集日志,过滤日志,结构格式化,然后将处理好的日志发送到 es。 K 则是 kibana,主要提供一个可视化界面,然后操作 es,来帮助我们完成查询操作。 构建网络首先我们需要创建一个网络,来使这三个容器之间可以互相访问,完成通信。 我们在 docker 中使用下面这个命令来完成网络的创建 1234#...
一台 mac 的开发环境配置
最近买了一台 M1 的 mac,心水的 mac 终于到手了,先折腾一阵子,打算写个笔记记录一下。整体分为踩坑点、注意点、和一些常用的小 Tips… 本文持续更新!!! 一些小 Tips: 软件如果打不开,提示 xxx 已损坏,要移到废纸篓 终端输入 sudo spctl --master-disable 还不行则使用 xattr -cr /Application/程序.app 例如 qq 打不开 xattr -cr /Application/QQ.app 最新系统更新到了 14.2 版本发现,还不行的话去设置里的隐私与安全性,拉到最下面,看下是不是被拦截了,允许就可以打开了 使用 Vim 编辑完成保存退出失败,强制保存也失败 很多命令包括复制权限一样,需要在命令前加上 sudo 使用管理员权限 mac 安装软件很简单,要么去 appstore,要么下载安装包,以 dmg 为后缀的,直接把程序拖到 Application,听到叮的一声就完成了 自带的 vim 编辑器太丑了? 进入用户目录 cd ~ 创建 vim 配置文件 sudo vim...
在 docker 上安装 Gitlab
gitlab 介绍gitlab 是一款基于 git 仓库的代码管理工具,可以帮助我们团队进行版本控制和协作开发。gitlab 还提供了完整的持续集成 / 持续交付平台,能够自动化代码构建、测试、发布等过程,并且是一款开源的平台,公司也可以根据需求来进行定制化,满足不同团队,适应不同的需求和流程。 下载镜像12# 下载gitlab镜像docker pull gitlab/gitlab-ce 编写安装脚本注意我们这里要挂载三个目录,我的目录是在 /usr/local/docker/gitlab 下面的三个文件夹里面。其中 /etc/gitlab 为保存 gitlab 的配置文件,/var/log/gitlab 为保存 gitlab 的日志文件,/var/opt/gitlab 为保存 gitlab 数据文件。这里我用的端口号是 9980 123456docker run --name gitlab --restart always \ -p 9980:9980 -p 222:22 \ -v /usr/local/docker/gitlab/config:/etc/gitlab \...