synchronized属于重量级锁,实现代码同步。
Java SE1.6优化引入了偏向锁和轻量级锁,同时支持锁升级,以减少获取锁和释放锁的性能消耗。
锁的对象
synchronized可以修饰Java非空对象,常见3种形式:
锁当前实例
修饰普通方法,例如:1
2synchronized void add(){
}那么该对象实例将会在执行该方法时阻塞,以保持同步执行,不可并行执行;但是不同对象可以并行执行。
一个人,一根烧火棍,面对整个世界.
synchronized属于重量级锁,实现代码同步。
Java SE1.6优化引入了偏向锁和轻量级锁,同时支持锁升级,以减少获取锁和释放锁的性能消耗。
synchronized可以修饰Java非空对象,常见3种形式:
锁当前实例
修饰普通方法,例如:
1 | synchronized void add(){ |
那么该对象实例将会在执行该方法时阻塞,以保持同步执行,不可并行执行;但是不同对象可以并行执行。
Java代码经过Java编译器编译成字节码,并由类加载器加载到JVM运行时数据区,
最终由JVM执行引擎执行字节码,转换为汇编指令在CPU内执行。
Java并发机制主要依赖JVM实现和CPU指令。
volatile修饰变量,提供多处理器并发中共享变量的可见性,是轻量的synchronized。
volatile由CPU指令实现,不会引起上下文切换,性能比synchronized高。
以下为Zuul利用ratelimit在网关进行接口限流。
方案 | 说明 |
---|---|
基于用户id | 根据用户标识或匿名 |
基于用户角色 | 根据用户角色 |
基于用户源IP | 请求源IP |
基于请求URL | 下游服务地址 |
基于请求方法类型 | HTTP请求方法,GET、POST等 |
基于请求服务 | 下游服务 |
1 | <!-- 请求限流 --> |
本文依赖ribbon实现在Spring Cloud中的灰度测试。
Zuul及下游服务中均引入包1
2
3
4
5
6<!-- 实现灰度测试关键包 -->
<dependency>
<groupId>io.jmnarloch</groupId>
<artifactId>ribbon-discovery-filter-spring-cloud-starter</artifactId>
<version>2.1.0</version>
</dependency>
Nacos与Eureka均提供注册中心和服务治理功能,以下为两者差异和选型方案。
模块 | Nacos | Eureka | 说明 |
---|---|---|---|
注册中心 | 是 | 是 | 服务治理基本功能,负责服务中心化注册 |
配置中心 | 是 | 否 |
Eureka需要配合Config实现配置中心,且不提供管理界面 |
动态刷新 | 是 | 否 |
Eureka需要配合MQ实现配置动态刷新,Nacos采用Netty保持TCP长连接实时推送 |
可用区AZ | 是 | 是 | 对服务集群划分不同区域,实现区域隔离,并提供容灾自动切换 |
分组 | 是 | 否 |
Nacos可用根据业务和环境进行分组管理 |
元数据 | 是 | 是 | 提供服务标签数据,例如环境或服务标识 |
权重 | 是 | 否 |
Nacos默认提供权重设置功能,调整承载流量压力 |
健康检查 | 是 | 是 | Nacos支持由客户端或服务端发起的健康检查,Eureka是由客户端发起心跳 |
负载均衡 | 是 | 是 | 均提供负责均衡策略,Eureka采用Ribion |
管理界面 | 是 | 否 |
Nacos支持对服务在线管理,Eureka只是预览服务状态 |
以下为Linux开发中常用的命令。
常用于筛选日志,并查看上下文
grep [选项] ‘模式’ [文件]
选项:
-A 后几行
-B 前几行
-C 前后几行
模式:
待筛选文本
文件:
待筛选源文件
举例1
2
3grep -A 20 'cat' info.log # 显示info.log及后20行
grep -B 20 'cat' info.log # 显示info.log及前20行
grep -C 20 'cat' info.log # 显示info.log文件里匹配cat字串行以及上下20行
本文介绍死锁产生的条件及优化方案。
线程互相等待
常见的死锁有JDK死锁和数据库死锁。
以JDK死锁为例:
1 | public class Deadlock { |
本文为针对Hexo博客和Next主题的优化和配置。
vi _config_yml
1 | title: xxx的技术博客 |
cd themes/next
vi _config.yml
1 | auto_excerpt: |
文章内使用<!--more-->
作为预览分割
本文介绍生产环境中Nacos集群的安装配置,及与Spring Cloud的集成。
类似于Spring Cloud Eureka和Spring Cloud Config,Nacos提供了服务注册管理和配置中心的功能;其中配置中心实现动态刷新,无需MQ。
相对于Eureka,Nacos是由阿里提供的开源服务,可以兼容Spring Cloud,也支持其他语言例如python服务的注册管理。
环境要求:
64 bit JDK 1.8+
MySql 5.6.5+
安装包下载
当前版本 1.0.0
解压
unzip nacos-server-$version.zip
tar -xvf nacos-server-$version.tar.gz