<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hnsitsing的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hnsitsing</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hnsitsing]]></copyright><item><title><![CDATA[Go语言Delve调试]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/113743231</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/113743231</guid><author>hnsitsing</author><pubDate>Sun, 07 Feb 2021 17:00:56 +0800</pubDate><description><![CDATA[Delve是Go语言的调试工具
安装
执行如下命令：
go get -u github.com/go-delve/delve/cmd/dlv

查看是否安装成功:
dlv version

如果没有dlv命令，常见问题是由于没有将dlv路径增加到PATH中，默认安装在GOPATH/bin路径下，或通过find命令进行查找确定具体安装路径
find / -name dlv 2&gt;/dev/null

确定完安装路径后，将路径加入PATH中，或者将dlv拷贝到/usr/local/bin目录
PATH=$P]]></description><category></category></item><item><title><![CDATA[Golang性能分析工具pprof]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/111710389</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/111710389</guid><author>hnsitsing</author><pubDate>Fri, 25 Dec 2020 21:56:29 +0800</pubDate><description><![CDATA[pprof是一款Golang自带的开箱即用的性能监控和分析工具，括以下两个标准库：

runtime/pprof：采集工具型应用运行数据进行分析
net/http/pprof：采集服务型应用运行时数据进行分析

runtime/pprof
程序主动调用库函数runtime.StartCPUProfile/runtime.StopCPUProfile等函数来进行数据的采集。
优点：灵活性高、按需采集。
net/http/pprof
通过提供http接口来进行应用程序数据采样，可实时查看程序的运行状态。
优点：]]></description><category></category></item><item><title><![CDATA[Go语言log库]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/111170103</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/111170103</guid><author>hnsitsing</author><pubDate>Mon, 14 Dec 2020 14:47:55 +0800</pubDate><description><![CDATA[日志作为一种记录应用运行状态的方式，在日常开发中是必不可少的功能。每种语言都有其相对应的日志库供开发者使用。对于Go语言，虽然有时可以用fmt库输出一些信息，但是不够灵活。Go 语言在标准库中提供了一个日志库log，用于记录程序中的日志信息。
import "log"
func main() {
  var hello := "hello"
  var world := "world"
  log.Printf("this is a test, %s %s", hello, world)
  log.Pan]]></description><category></category></item><item><title><![CDATA[Go语言cobra库]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/110817899</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/110817899</guid><author>hnsitsing</author><pubDate>Mon, 07 Dec 2020 14:28:51 +0800</pubDate><description><![CDATA[cobra是Go语言的一个命令行库，用来编写程序的命令行功能。并且提供了一个脚手架， 可以用于生成基于 cobra 的应用程序框架。许多知名的开源项目都使用 cobra 库实现命令行功能，例如：Kubernetes、etcd等等。
cobra 提供可以为程序提供许多功能，包括：支持子命令、兼容 POSIX 选项、嵌套子命令等，并可使用脚手架轻松生成程序框架和命令。
了解之前需要明确 3 个基本概念：

命令（Command）：就是需要执行的操作；
参数（Arg）：命令的参数；
选项（Flag）：用于调整命令]]></description><category></category></item><item><title><![CDATA[Go依赖管理--go mod]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/108835648</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/108835648</guid><author>hnsitsing</author><pubDate>Sun, 27 Sep 2020 20:19:16 +0800</pubDate><description><![CDATA[2020.9.27增加内容

]]></description><category></category></item><item><title><![CDATA[高并发系统设计--限流]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/108700150</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/108700150</guid><author>hnsitsing</author><pubDate>Sun, 20 Sep 2020 22:46:34 +0800</pubDate><description><![CDATA[前面学习过的熔断和降级都是通过暂时关闭某些非核心服务或者组件来保护核心系统的可用性。但是并不是所有的场景下都可以使用熔断降级的策略，例如当核心服务产生比较大的影响时，总不能把核心服务进行熔断与降级，些时一般采用限流方案来进行保护。
限流指的是通过限制到达系统的并发请求数量，保证系统能够正常响应部分用户请求，而对于超过限制的流量，则只能通过拒绝服务的方式保证整体系统的可用性。限流策略一般部署在服务的入口层，比如 API 网关中。
现实中可以在多个维度上对到达系统的流量做控制，例如：

你可以对系统每分钟处理多]]></description><category></category></item><item><title><![CDATA[高并发系统设计--熔断降级]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/108563268</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/108563268</guid><author>hnsitsing</author><pubDate>Sun, 13 Sep 2020 15:42:14 +0800</pubDate><description><![CDATA[熔断降级主要用来解决由于依赖的资源或者服务不可用，最终导致整体服务宕机的情况。
在讨论熔断与降级的时候，一般会涉及到另一个专业名词：雪崩。雪崩主要是指由于局部故障最终导致全局故障，致使整个系统无法正常工作的情况。雪崩一般由服务间的级联反应引起，雪崩主要由两个方面引起：1. 资源耗尽或资源不足；2. 服务间相互依赖。
为了解决这种由于局部故障引发全局故障的问题，解决的思路就是在检测到某一个服务的响应时间出现异常时，切断调用它的服务与它之间的联系，让服务的调用快速返回失败，从而释放这次请求持有的资源。这个思路也]]></description><category></category></item><item><title><![CDATA[高并发系统设计--配置管理]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/108437462</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/108437462</guid><author>hnsitsing</author><pubDate>Sun, 06 Sep 2020 21:52:36 +0800</pubDate><description><![CDATA[配置是应用中常见的内容，主要是用来通过修改配置来改变程序的执行。常见的如linux系统配置，通过修改系统配置，动态地对系统功能做调整。
在平常的应用中，主要有两种方式来管理配置：

通过配置文件来管理
使用配置中心来管理

常见的如Tomcat、Nginx，都是采用上面这种配置文件的方式来管理配置。采用配置文件的方式有一个问题，必须将服务重启后才能让配置生效。为了解决这个问题，一般需要配置中心来实现动态配置下发及加载。
配置中心可以算是微服务架构的标配组件，业界提供多种开源方案可供使用，例如：携程的Apol]]></description><category></category></item><item><title><![CDATA[高并发系统设计--监控]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/108319262</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/108319262</guid><author>hnsitsing</author><pubDate>Mon, 31 Aug 2020 13:16:05 +0800</pubDate><description><![CDATA[8.31补内容

]]></description><category></category></item><item><title><![CDATA[高并发系统设计--负载均衡与API网关]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/108188470</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/108188470</guid><author>hnsitsing</author><pubDate>Sun, 23 Aug 2020 21:00:58 +0800</pubDate><description><![CDATA[负载均衡
负载均衡：有两个用途，1. 将负载均衡的分配到多个处理节点上，减少单个处理节点的请求量，提升整体系统的性能。2. 作为流量入口，对请求方屏蔽服务节点的部署细节，实现对业务方无感的扩容。
可以分为两大类：一类是代理类的负载均衡服务；另一类是客户端负载均衡服务。

代理类的负载均衡服务以单独的服务方式部署，请求先经过负载均衡服务，由负载均衡服务选出一个合适的服务节点后，来实现流量的分发。常见的比较著名的代理服务有lvs和nginx; LVS一般称为四层负载；Nginx一般称为七层负载。lvs性能比ng]]></description><category></category></item><item><title><![CDATA[高并发系统设计--注册中心与分布式Trace]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/108045289</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/108045289</guid><author>hnsitsing</author><pubDate>Sun, 16 Aug 2020 22:07:18 +0800</pubDate><description><![CDATA[注册中心
注册中心主要用来解决在服务端异常、扩容、缩容时如何快速通知客户端。常见的注册中心有Zookeeper、etcd、consul、nacos、eureka等。

注册中心主要提供两个基本功能：


提供服务地址的存储
当存储内容发生变化时，将变化内容推送给客户端


完整的服务注册和发现的过程：


客户端会与注册中心建立连接，并且告诉注册中心，它对哪一组服务感兴趣；
服务端向注册中心注册服务后，注册中心会将最新的服务注册信息通知给客户端；
客户端拿到服务端的地址之后就可以向服务端发起调用请求了。

]]></description><category></category></item><item><title><![CDATA[高并发系统设计--软件架构]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/107872014</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/107872014</guid><author>hnsitsing</author><pubDate>Fri, 07 Aug 2020 22:46:07 +0800</pubDate><description><![CDATA[单体架构
单体架构一般用于项目初期，方便尽早的将项目搭建起来。主要有以下特点：

开发简单，代码和项目集中式管理；
运维简单，节省维护成本
排查问题简单，方便问题定位

当项目规模变大时，也会遇到以下问题：

容易形成瓶颈，当所有功能处于一个程序中，请求量变大后，容易占用过多资源
代码管理麻烦，开发人员变多后，容易形成冲突
功能耦合严重，模块间相互影响
任何小的修改，都需要重新构建、发版、升级

微服务架构
对于单体架构在系统规模变大后，可以能过微服务拆分来解决这些问题。
微服务拆分原则：

单一服务内部功]]></description><category></category></item><item><title><![CDATA[高并发系统设计-消息队列]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/107751788</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/107751788</guid><author>hnsitsing</author><pubDate>Sun, 02 Aug 2020 21:37:18 +0800</pubDate><description><![CDATA[该文章记录极客时间《高并发系统设计》系列文章的相关知识点，供以后自己查看。这篇文章主要介绍一下消息队列的使用。
消息队列一般有以下作用：异步处理、解耦合和削峰填谷。

异步处理可以简化业务流程中的步骤，提升系统性能；但是消息存在着丢失的风险，需要考虑如何确保消息一定到达。
削峰填谷可以削去到达秒杀系统的峰值流量，让业务逻辑的处理更加缓和，会造成请求处理的延迟。
解耦合可以将秒杀系统和数据系统解耦开，这样两个系统的任何变更都不会影响到另一个系统。增加系统的鲁棒性。

消息队列可能存在消息丢失的情况，如何防止消]]></description><category></category></item><item><title><![CDATA[高并发系统设计-缓存]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/107590839</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/107590839</guid><author>hnsitsing</author><pubDate>Sun, 26 Jul 2020 11:13:43 +0800</pubDate><description><![CDATA[该文章记录极客时间《高并发系统设计》系列文章的相关知识点，供以后自己查看。这篇文章主要介绍一下缓存的使用，从以下几个方面：缓存读写、缓存高可用、缓存穿透。
缓存读写
缓存的读写中最主要的写（缓存更新），不同的使用场景，一般会使用不同的更新策略。选择策略不同，会造成缓存与数据库数据之间的不一致性。

先更新数据库，再更新缓存


造成数据不一致，如下：
变更数据库和变更缓存是两个独立的操作，并没有对操作做任何的并发控制。当两个线程并发更新时候，就会因为写入顺序的不同造成数据的不一致。


更新数据库后，删除缓]]></description><category></category></item><item><title><![CDATA[高并发系统设计-其它知识（一）]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/107415997</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/107415997</guid><author>hnsitsing</author><pubDate>Fri, 17 Jul 2020 19:21:51 +0800</pubDate><description><![CDATA[全局唯一ID
如果系统有使用数据库，最常想到的全局唯一ID是利用数据库的自增字段来保证唯一性。这种方法生成的长度不同，并且与数据为交互，性能较差。
其它两个常用的两个算法是: UUID与snowflake

UUID
通用唯一识别码,不依赖中央机构的注册和分配，32位字符，提供5个算法实现，具体算法可以网上搜索。


算法1，2可以保证唯一性；
算法3、5除了利用的hash算法不同外，其它都相同，可以保证局部唯一，有极小的概率重复，可忽略不计。
算法4，使用伪随机算法，不建议使用



Snowflake
]]></description><category></category></item><item><title><![CDATA[高并发系统设计-数据库篇]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/107292934</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/107292934</guid><author>hnsitsing</author><pubDate>Sat, 11 Jul 2020 23:27:58 +0800</pubDate><description><![CDATA[上一篇文章简单了解了高并发系统设计的基础知识，这一篇开始说明完成这些目标会使用的一些专业方法，例如与数据库优化。
数据库连接池

在代码实现较简单的情况下，会使用短连接的方式来进行数据库请求，在并发量较大的时候，数据库请求会较慢。
可使用连接池将数据库连接预先建立好，使用的时候获取一个链接，不需要频繁地创建及释放连接。
数据库连接池有两个重要的配置：最小连接数和最大连接数，这两个参数控制着连接池的获取，如下：


当前连接数小于最小连接数，则创建新连接处理请求
连接池中有空闲连接则复用
连接池中没有空闲连接]]></description><category></category></item><item><title><![CDATA[高并发系统设计基础知识]]></title><link>https://blog.youkuaiyun.com/hnsitsing/article/details/107132958</link><guid>https://blog.youkuaiyun.com/hnsitsing/article/details/107132958</guid><author>hnsitsing</author><pubDate>Sun, 05 Jul 2020 00:25:26 +0800</pubDate><description><![CDATA[该文章记录极客时间《高并发系统设计》系列文章的相关知识点，供以后自己查看
工作过程中，经常用听到高并发、高性能系统等名词，什么时高并发系统，简单的来说就是可以同时处理许多请求、满足业务需求的系统。下面介绍一些相关的基本知识。
高并发系统常见实现方案

异步：如果请求无法短时间完成，可以先返回，等完成后通知请求对方，主要为了提高cpu利用率，处理更多请求
缓存：为了解决IO效率问题，将一些数据缓存，增加系统性能
横向扩展：在单个服务无法满足需求时，通过增加服务实例数，来提高总体系统并发性能
上述三个方案中异步]]></description><category></category></item></channel></rss>