<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[nuoWei_SenLin的博客]]></title><description><![CDATA[黄沙百战穿金甲，不破楼兰终不还]]></description><link>https://blog.youkuaiyun.com/nuoWei_SenLin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nuoWei_SenLin]]></copyright><item><title><![CDATA[一分钟，制作一个centos镜像]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109123963</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109123963</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 19:57:37 +0800</pubDate><description><![CDATA[大家好，笔者最近学习docker相关的技术。今天，我们一起制作一个 centos镜像。

记得上大学期间我们学习Linux的时候，我们通常是在Window上安装一个vmvare软件，然后下载一个几个G的centos的镜像文件，最后安装centos虚拟机。整个过程非常痛苦，因为安装一个虚拟机，需要花费小半天时间，常常会因为各种原因，安装好的虚拟机启动不起来。并且，我们需要启动多个机器时，会很吃宿主机的cpu和内存。直到后来，我学了Docker相关的技术，才知道，原来可以这样玩！

不禁感叹，现在的大学生应该都]]></description><category></category></item><item><title><![CDATA[爱TA!就为TA搭建一个只属于你俩的IM系统]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120872</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120872</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 17:32:54 +0800</pubDate><description><![CDATA[前一段时间笔者利用业余时间，基于Netty开发了一套基本功能比较完善的IM系统。该系统支持私聊、群聊、会话管理、心跳检测，支持服务注册、负载均衡，支持任意节点水平扩容。正好前一段，网上的一些读者，也希望笔者分享一些Netty或者IM相关的知识，所以今天笔者把开发的这套IM系统与大家分享，并讲述IM系统的基本原理。

相信很多朋友对微信、QQ等聊天软件的实现原理都非常感兴趣，笔者同样对这些软件有着深厚的兴趣。另外笔者在公司也是做IM的，每天承载着上亿条消息的发送。


github地址：

https://g]]></description><category></category></item><item><title><![CDATA[Sentinel：流控规则]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120556</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120556</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 17:22:09 +0800</pubDate><description><![CDATA[上一篇文章，我们一起探讨了Sentinel流量控制的简单用法，本小节，我们一起探讨Sentinel的三种流控规则。



说到系统接口的限流，我们一般会想到用几种限流的算法，比如漏桶算法、令牌桶算法，在单机内，我们可以采用Guava中提供的API帮我们实现限流功能。而在分布式环境中，我们可以用Redis、MQ等中间件来实现限流的功能。



然而，Sentinel为我们提供了更加灵活的限流规则和策略，同时也支持单机和集群模式，方便我们根据不同的应用场景，选择不同的流控、限流的规则。



常用的有如...]]></description><category></category></item><item><title><![CDATA[Sentinel：流量控制]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120389</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120389</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 17:10:38 +0800</pubDate><description><![CDATA[Sentinel是什么？

Sentinel是面向分布式服务架构的轻量级流量控制组件，主要以流量为切入点，从限流、服务熔断、服务降级、系统保护等多个层面，保障分布式系统的稳定性。

在阿里巴巴内部有一句口号：“稳定压倒一切”，稳定性是系统的基础能力，目前，Sentinel在阿里巴巴内部广泛被使用，为多年的双11、双12等大促活动保驾护航。

Sentinel的主要特性：



Sentinel由以下两个部分组成：


	核心库（Java 客户端）不依赖任何框架/库，能够运行于所有 Java 运行时环境，同时]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：Dubbo技术汇总]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120338</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120338</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 17:05:14 +0800</pubDate><description><![CDATA[最近编写了若干与Dubbo相关的技术博客，今天汇总发给大家

Apache Dubbo系列：ZooKeeper注册中心

Apache Dubbo系列：Netty与Dubbo是如何对接的

Apache Dubbo系列：集群容错整体架构

Apache Dubbo系列：Dubbo线程模型

Apache Dubbo系列：Dubbo的线程池策略

Apache Dubbo系列：全链路异步

Apache Dubbo系列：泛化调用

Apache Dubbo系列：增强SPI
...]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：全链路异步]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120064</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109120064</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 17:02:37 +0800</pubDate><description><![CDATA[Dubbo从2.7.0版本开始，升级了对java8的支持，以JUC包下的CompletableFuture为基础，支持所有异步编程接口，解决了2.7.0版本之前异步调用功能使用上的不方便。

Dubbo异步调用也是基于NIO的非阻塞能力实现的，服务消费端不需要启动多个线程即可完成并行调用多个远程服务，其调用流程如下：



Dubbo2.7.0之前的弊端

在2.7.0之前，Dubbo的服务消费者异步调用服务提供者的的方式如下：





public interface UserService {
  .]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：泛化调用]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109119901</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109119901</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 16:52:53 +0800</pubDate><description><![CDATA[上一章，我们讲到了Dubbo的线程池策略，本章我们一起探讨，Dubbo如何实现泛化调用的。主要内容包括：

1、什么是泛化调用

2、泛化调用的三种方式

3、如何使用

4、源码分析



推荐阅读：

Apache Dubbo系列：集群容错整体架构

Apache Dubbo系列：Dubbo线程模型

Apache Dubbo系列：Dubbo的线程池策略

什么是泛化调用

我们基于Dubbo API搭建Dubbo服务时，服务消费端需要依赖于一个SDK二方包，其中存放这服务提供端提供的所有接口。

泛.]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：Dubbo的线程池策略]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109119750</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109119750</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 16:47:17 +0800</pubDate><description><![CDATA[概述

我们上篇文章讲到，Dubbo提供了多种线程模型，是为了尽早的释放I/O线程，把耗时的业务分派给业务线程池，那么这里的线程池是什么类型的线程池呢？是我们所熟知的JAVA线程池吗？并不是，这里的线程池，也是Dubbo的扩展接口ThreadPool。



ThreadPool

Dubbo为我们提供了四种类型的线程池，分别是

1、FixedThreadPool(默认)，固定线程数的线程池。

2、LimitedThreadPool，线程池的线程数随着并发量动态增加，但不会超过配置的阈值。
3、Eag.]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：Dubbo线程模型]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109119602</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109119602</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 16:40:51 +0800</pubDate><description><![CDATA[导读

我们都知道，Dubbo使用默认的网络传输框架是Netty，服务提供方NettyServer使用两个NIO线程池EventLoopGroup(boss)和EventLoopGroup(worker)，前者负责接收客户端的连接，并分发给后者处理。我们把这两个线程组成为I/O线程(或Netty线程)。



如果服务提供方能快速处理客户端的请求，那么直接在I/O线程(Netty线程)上处理比较合适。否则(如查DB、请求三方接口等)，需要将客户端的请求，分派(Dispatcher)给业务线程池(Dubbo.]]></description><category></category></item><item><title><![CDATA[MySQL5.7二进制包安装]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109113296</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109113296</guid><author>nuoWei_SenLin</author><pubDate>Fri, 16 Oct 2020 11:51:11 +0800</pubDate><description><![CDATA[大家好，今天给大家分享mysql相关的技术。

我们在深入学习mysql的时候，我们不会在window安装mysql，总需要在CentOS下搭建一个mysql server，然而，如果采用源码包的安装方式会特别费时间，需要安装各种软件依赖，然后make&amp;&amp;make install，并且会经常安装失败。今天我给大家分享一下mysql二进制包的安装（针对mysql5.7，与mysql5.6安装方式略有不同）。



1、下载mysql

输入网址，www.mysql.com,找到mysql的下.]]></description><category></category></item><item><title><![CDATA[API接口限流]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109103280</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/109103280</guid><author>nuoWei_SenLin</author><pubDate>Thu, 15 Oct 2020 19:09:26 +0800</pubDate><description><![CDATA[嗨，大家好！今天给大家分享一个高并发系统中必备的技能——限流。

在正式开始之前我想问问大家，身为程序员的大家，在周一到周五早上上班进地铁站的时候，有没有见过类似这样的场景？





同样，在互联网行业中，也存在这样得场景，我们把它称为——限流，为什么要限流呢，原因如下：

在系统上线初期，用户量和访问量不大得时候，一般部署几台应用服务器，数据库做一个读写分离就基本上抗得住，但随着时间的推移，业务的发展，用户量和日活得增加，系统所承受的压力越来越大，我么都知道，应用服务器扩容很方便，但数据库扩容就有些麻.]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：集群容错整体架构]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107624562</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107624562</guid><author>nuoWei_SenLin</author><pubDate>Mon, 27 Jul 2020 23:57:44 +0800</pubDate><description><![CDATA[本节为大家介绍Dubbo的集群容错的整体架构，让大家对整个集群容错层有一个整体的理解，并且让大家知道，集群容错层是如何工作的，每个组件的作用以及结构。

导读

在分布式环境中，为了避免单点故障，通常一个业务会部署在多台机器上。服务消费方调用时，如果服务提供方由于某些原因不可用，在Dubbo的集群容错的作用下，会自动根据某些容错策略选择可用的服务给消费方，以达到整个服务集群的高可用。

集群容错

在讲解源码前，我们先看一下集群容错的整体架构图和每个组件的作用。



我们可以把Cluster看作是一个集群]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：Netty与Dubbo是如何对接的]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107624360</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107624360</guid><author>nuoWei_SenLin</author><pubDate>Mon, 27 Jul 2020 23:48:02 +0800</pubDate><description><![CDATA[在 Dubbo 中，很多扩展点都是通过Dubbo SPI机制进行加载的，比如 Transporter、Cluster、LoadBalance 等。有时，有些扩展并不想在框架启动阶段被加载，而是希望在扩展方法被调用时，根据运行时参数进行加载（按需加载。由于Java SPI机制有性能问题，Dubbo SPI对Java SPI做了一定优化）。Dubbo 会为拓展接口生成具有代理功能的代码。然后通过 javassist 或 jdk 编译这段代码，得到 Class 类，最后再通过反射创建代理类。

如果大家对Dubb]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：增强SPI]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107601612</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107601612</guid><author>nuoWei_SenLin</author><pubDate>Sun, 26 Jul 2020 23:08:13 +0800</pubDate><description><![CDATA[Dubbo良好的扩展性与两个方面是密不可分的，一是Dubbo整体架构中，在合适的场景中巧妙的使用了设计模式，二是使用Dubbo SPI机制，使Dubbo的接口与实现完全解耦。

在本次分享中，您可以了解如下知识点


	JavaSPI机制
	
	
	Java SPI机制的缺点
	
	
	Dubbo SPI配置规范
	
	
	Dubbo SPI的分类与缓存
	
	
	Dubbo SPI的特点
	
	
	Dubbo SPI源码分析
	
	
	Dubbo对IOC的支持
	
JavaSPI机制

SPI，全称S..]]></description><category></category></item><item><title><![CDATA[Apache Dubbo系列：ZooKeeper注册中心]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107601027</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/107601027</guid><author>nuoWei_SenLin</author><pubDate>Sun, 26 Jul 2020 22:46:44 +0800</pubDate><description><![CDATA[在Dubbo微服务体系中，注册中心是核心组件之一。Dubbo通过注册中心实现分布式环境中各个服务之间的注册和发现，是各个节点间的纽带。



在微服务体系中，注册中心的作用如下：


	服务动态加入。一个服务提供者可以通过注册中心动态的将自己暴露给各个服务消费方。
	
	
	服务动态订阅。服务消费方可以通过注册中心，实时的感知新旧服务的上线与下线。
	
	
	动态调整。注册中心支持参数的动态调整，新参数将自动更新到所有相关的节点中。
	
	
	统一配置。提供统一的配置服务。
	
在Dubb...]]></description><category></category></item><item><title><![CDATA[Netty入门之TimeServer]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/88778633</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/88778633</guid><author>nuoWei_SenLin</author><pubDate>Sun, 24 Mar 2019 16:56:37 +0800</pubDate><description><![CDATA[嗨，大家好！！！

最近，上级给我安排了个任务，要把系统中与websocket的的模块独立出来，并用Netty重写，哈哈，从毕业到现在一直做的都是业务方面的开发，这方面的工作还没怎么做过，很高兴的接了这个任务。

下面就带大家初识JAVA界大名鼎鼎的Netty，从这篇文章中，大家可以学到的内容如下：


	什么是Netty
	
	
	JDK中的I/O的缺点
	
	
	为什么选择Netty
	
	
...]]></description><category></category></item><item><title><![CDATA[Dubbo如何正确捕获业务异常]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/84676917</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/84676917</guid><author>nuoWei_SenLin</author><pubDate>Sat, 09 Feb 2019 21:28:17 +0800</pubDate><description><![CDATA[    笔者所在的公司，项目正在重构，从一个SpringBoot项目往Dubbo上迁移，但在拆分后发现一个问题，服务消费者(后文用Consumer代替)无法正确捕获服务提供者(后文用provider代替)所抛出的非受检查异常。在未拆分之前，项目都是打成一个jar包运行，service层未处理的unchecked异常，在controller层捕获到后可以正常打印出异常的堆栈信息，方便开发人员快速定位...]]></description><category></category></item><item><title><![CDATA[【算法面试】二叉搜索树]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/86761500</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/86761500</guid><author>nuoWei_SenLin</author><pubDate>Sun, 03 Feb 2019 22:30:06 +0800</pubDate><description><![CDATA[
每一个内心仰望理想的人，都在低头干活





 摘要


顾名思义，二叉搜索树是由两个孩子节点组成的树状的数据结构，由于其特殊的性质，任意一个节点的左子树的每个节点总比这个节点小，右子树的每个节点总比这个节点大，所以二叉搜索树的查询性能比较好。

本文只讲解二叉搜索树，二叉平衡树不是本文重点


 正文


不得不承认，递归思想在二叉树中展现的淋漓尽致，本文讲解的二叉搜索树主要操作如下：


...]]></description><category></category></item><item><title><![CDATA[【算法面试】TopN问题]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/86734931</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/86734931</guid><author>nuoWei_SenLin</author><pubDate>Fri, 01 Feb 2019 02:59:01 +0800</pubDate><description><![CDATA[
竹石

 

作者：郑燮

 

咬定青山不放松，立根原在破岩中。

千磨万击还坚劲，任尔东西南北风。





 前言


 又到了一年一度的南北人口大迁移的时候，没有买票的赶紧买票，今年很早就已经回家准备过年了，因为小编已经离职啦，最近正在积极复习找工作，闲话不多扯，开始今天的正题。


面试题目：如何在10亿个整数中找出前1000个最大的数。


 这就是有名的TopN问题，这样的问题有很...]]></description><category></category></item><item><title><![CDATA[从数据存储角度分析Redis性能为何如此高]]></title><link>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/86673053</link><guid>https://blog.youkuaiyun.com/nuoWei_SenLin/article/details/86673053</guid><author>nuoWei_SenLin</author><pubDate>Wed, 30 Jan 2019 13:19:04 +0800</pubDate><description><![CDATA[ 


胸藏文墨怀若谷，腹有诗书气自华




前言

Redis作为一种KV缓存服务器，有着极高的性能，相对于memcache，Redis支持更多中数据类型，因此在业界广泛应用。

正文

记得笔者刚毕业那会参加面试，面试官会问我Redis为什么快，由于当时技术水平有限，我只能回答出如下两点：

数据是存储在内存中的。
	Redis是单线程的。
当然，将数据存储在内存中，读取的时候后不需要进行磁...]]></description><category></category></item></channel></rss>