Perkins4j2的技术博客

一个人,一根烧火棍,面对整个世界.


  • 首页

  • 标签91

  • 分类8

  • 归档123

  • 搜索

Java并发编程艺术 - synchronized使用和原理

发表于 2019-05-05 | 分类于 并发编程
本文字数: 1.6k | 阅读时长 ≈ 1 分钟

synchronized属于重量级锁,实现代码同步。

Java SE1.6优化引入了偏向锁和轻量级锁,同时支持锁升级,以减少获取锁和释放锁的性能消耗。

锁的对象

synchronized可以修饰Java非空对象,常见3种形式:

  • 锁当前实例
    修饰普通方法,例如:

    1
    2
    synchronized void add(){
    }

    那么该对象实例将会在执行该方法时阻塞,以保持同步执行,不可并行执行;但是不同对象可以并行执行。

阅读全文 »

Java并发编程艺术 - volatile使用和原理

发表于 2019-05-05 | 更新于 2019-06-24 | 分类于 并发编程
本文字数: 2.2k | 阅读时长 ≈ 2 分钟

Java代码经过Java编译器编译成字节码,并由类加载器加载到JVM运行时数据区,
最终由JVM执行引擎执行字节码,转换为汇编指令在CPU内执行。

Java并发机制主要依赖JVM实现和CPU指令。

volatile

volatile修饰变量,提供多处理器并发中共享变量的可见性,是轻量的synchronized。

volatile由CPU指令实现,不会引起上下文切换,性能比synchronized高。

阅读全文 »

Spring Cloud - 如何利用Zuul实现接口限流

发表于 2019-04-23 | 更新于 2019-05-05 | 分类于 微服务
本文字数: 3.7k | 阅读时长 ≈ 3 分钟

以下为Zuul利用ratelimit在网关进行接口限流。

限流方案

方案 说明
基于用户id 根据用户标识或匿名
基于用户角色 根据用户角色
基于用户源IP 请求源IP
基于请求URL 下游服务地址
基于请求方法类型 HTTP请求方法,GET、POST等
基于请求服务 下游服务

POM引入

1
2
3
4
5
6
<!-- 请求限流 -->
<dependency>
<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
阅读全文 »

Spring Cloud - 如何利用Zuul进行网关开发

发表于 2019-04-23 | 更新于 2019-06-24 | 分类于 微服务
本文字数: 7.3k | 阅读时长 ≈ 7 分钟

Zuul介绍

Zuul是Spring Cloud全家桶一员,用于微服务网关开发,实现对外服务请求的白黑名单控制、代理转发、限流、权鉴认证、灰度测试等。

阅读全文 »

Spring Cloud - Ribbon在Zuul上实现灰度和版本测试

发表于 2019-04-23 | 更新于 2019-05-05 | 分类于 微服务
本文字数: 3.9k | 阅读时长 ≈ 4 分钟

本文依赖ribbon实现在Spring Cloud中的灰度测试。

POM引入

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>

阅读全文 »

Spring Cloud - Nacos与Eureka区别及如何选型

发表于 2019-04-23 | 更新于 2019-08-22 | 分类于 微服务
本文字数: 1.1k | 阅读时长 ≈ 1 分钟

Nacos与Eureka均提供注册中心和服务治理功能,以下为两者差异和选型方案。

功能差异

模块 Nacos Eureka 说明
注册中心 是 是 服务治理基本功能,负责服务中心化注册
配置中心 是 否 Eureka需要配合Config实现配置中心,且不提供管理界面
动态刷新 是 否 Eureka需要配合MQ实现配置动态刷新,Nacos采用Netty保持TCP长连接实时推送
可用区AZ 是 是 对服务集群划分不同区域,实现区域隔离,并提供容灾自动切换
分组 是 否 Nacos可用根据业务和环境进行分组管理
元数据 是 是 提供服务标签数据,例如环境或服务标识
权重 是 否 Nacos默认提供权重设置功能,调整承载流量压力
健康检查 是 是 Nacos支持由客户端或服务端发起的健康检查,Eureka是由客户端发起心跳
负载均衡 是 是 均提供负责均衡策略,Eureka采用Ribion
管理界面 是 否 Nacos支持对服务在线管理,Eureka只是预览服务状态
阅读全文 »

Linux运维常用命令

发表于 2019-04-22 | 更新于 2019-10-23 | 分类于 Linux
本文字数: 4.9k | 阅读时长 ≈ 4 分钟

以下为Linux开发中常用的命令。

筛选文本并查看指定上下行数

常用于筛选日志,并查看上下文

grep [选项] ‘模式’ [文件]

选项:
    -A  后几行
    -B  前几行
    -C  前后几行

模式:
    待筛选文本

文件:
    待筛选源文件

举例

1
2
3
grep -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行

阅读全文 »

Java并发编程艺术 - 死锁产生及优化

发表于 2019-04-22 | 更新于 2019-06-24 | 分类于 并发编程
本文字数: 2.9k | 阅读时长 ≈ 3 分钟

本文介绍死锁产生的条件及优化方案。

死锁产生

  1. 线程互相等待

    常见的死锁有JDK死锁和数据库死锁。

    以JDK死锁为例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public class Deadlock {
    static class Friend {
    private final String name;
    public Friend(String name) {
    this.name = name;
    }
    public String getName() {
    return this.name;
    }

    //同步锁bow
    public synchronized void bow(Friend bower) {
    System.out.format("%s: %s"
    + " has bowed to me!%n",
    this.name, bower.getName());
    //调用同步锁bowBack
    bower.bowBack(this);
    }

    //同步锁bowBack
    public synchronized void bowBack(Friend bower) {
    System.out.format("%s: %s"
    + " has bowed back to me!%n",
    this.name, bower.getName());
    }
    }

    public static void main(String[] args) {
    final Friend alphonse =
    new Friend("Alphonse");
    final Friend gaston =
    new Friend("Gaston");
    new Thread(new Runnable() {
    public void run() { alphonse.bow(gaston); }
    }).start();
    new Thread(new Runnable() {
    public void run() { gaston.bow(alphonse); }
    }).start();
    }
    }
    阅读全文 »

搭建GitHub博客教程 - Hexo及Next主题优化

发表于 2019-04-22 | 更新于 2019-06-24 | 分类于 工具利器
本文字数: 6.7k | 阅读时长 ≈ 6 分钟

本文为针对Hexo博客和Next主题的优化和配置。

标题配置

vi _config_yml

1
2
3
4
5
6
7
title: xxx的技术博客
subtitle: xxx
description: xx
keywords: xxx
author: xx
language: zh-CN
timezone: Asia/Chongqing

首页文章预览限制字数

cd themes/next

vi _config.yml

1
2
3
auto_excerpt:
enable: true
length: 150

文章内使用<!--more-->作为预览分割

阅读全文 »

Spring Cloud - Nacos集群配置和集成

发表于 2019-04-22 | 更新于 2019-06-24 | 分类于 微服务
本文字数: 4.3k | 阅读时长 ≈ 4 分钟

本文介绍生产环境中Nacos集群的安装配置,及与Spring Cloud的集成。

Nacos介绍

类似于Spring Cloud Eureka和Spring Cloud Config,Nacos提供了服务注册管理和配置中心的功能;其中配置中心实现动态刷新,无需MQ。

相对于Eureka,Nacos是由阿里提供的开源服务,可以兼容Spring Cloud,也支持其他语言例如python服务的注册管理。

nacosMap.jpg

Nacos安装

  • 环境要求:
    64 bit JDK 1.8+
    MySql 5.6.5+

  • 安装包下载
    当前版本 1.0.0

  • 解压
    unzip nacos-server-$version.zip
    tar -xvf nacos-server-$version.tar.gz

阅读全文 »
1…111213
Perkins

Perkins

123 日志
8 分类
91 标签
RSS
0%
© 2020 Perkins | 站点总字数: 335k | 站点阅读时长 ≈ 5:04
|