自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(210)
  • 收藏
  • 关注

原创 分布式锁和事务

锁单进程的系统中,存在多线程同时操作一个公共变量,此时需要加锁对变量进行同步操作,保证多线程的操作线性执行消除并发修改。解决的是单进程中的多线程并发问题。思考golang的channel和锁的关系:多个goroutine之间通过channel进行通信,管道也运用了锁机制分布式锁某些应用场景是在集群模式的多个相同服务,可能会部署在不同机器上,解决进程间安全问题,防止多进程同时操作一个变量或者数据库。解决的是多进程的并发问题。etcd分布式锁实现原理利用租约在etcd集群中创建一个ke

2021-03-23 09:44:37 392 2

转载 TCP/IP滑动窗口机制No.3

一、滑动窗口机制在进行数据传输时,如果传输的数据比较大,就需要拆分为多个数据包进行发送。TCP 协议需要对数据进行确认后,才可以发送下一个数据包,如图所示。从上图中可以看到,发送端每发送一个数据包,都需要得到接收端的确认应答以后,才可以发送下一个数据包。这样一来,就会在等待确认应答包环节浪费时间。为了避免这种情况,TCP引入了窗口概念。窗口大小指的是不需要等待确认应答包而可以继续发送数据包的最大值。例如,窗口大小为 3,数据包的传输如图所示。从上图中可以看到,发送端发送第一个..

2020-06-09 16:30:50 415

原创 递归之八皇后问题No.14

一、八皇后问题介绍八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于 1848 年提出:在 8×8 格的国际象棋上摆放八个皇后,使其不能互相攻击,即:任意两个皇后都不能处于同一行、 同一列或同一斜线上,问有多少种摆法(92)。 二、八皇后问题算法思路分析第一个皇后先放第一行第一列 第二个皇后放在第二行第一列、然后判断是否 OK, 如果不 OK,继续放在第二列、第三列、依次把所有列都 放完,找到一个合适 继续第三个皇后,还是第一列、第二列……直到.

2020-06-04 21:55:59 150

原创 递归之迷宫问题No.13

一、对迷宫问题分析如图所示:红色区域代表围栏不能通行,小球从左上角走到右下角为闯关成功 将图形转换为数字代替(用切片表示即可)如下图:1代表围栏;0代表通路;2代表走的路径 小球得到的路径,和程序员设置的找路策略有关即:可以先使用(下右上左),再改成(上右下左)二、代码实现package mainimport ( "fmt")//编写一个函数,完成老鼠找路//myMap *[8][7]int:地图,保证是同一个地图,使用引用//i,j 表示对地图的哪个点进行测.

2020-06-03 22:36:11 164

原创 go语言封装的 mysql详解

go语言封装的 mysqlpackage mainimport( "fmt" "database/sql" _"github.com/go-sql-driver/mysql" "strconv" "time" "strings" "encoding/json")var(...

2019-08-02 15:47:38 2981 2

转载 高并发解决方案案例

并发解决方案案例一、前端优化1、防盗链处理把一些恶意的请求拒之问外。如:现在有A,B两个站,A站 想用 B站 的资源,直接在页面嵌入了一些图片,JS,CSS,本身来说,A站并不关心B站会消耗多少流量,但是对于B站来说,如果我们调用了B站的一些图片,JS或者CSS,都会对它做一个HTTP请求,就会消耗流量和带宽...

2019-05-17 18:38:56 1737

原创 如何优化网站

如何优化网站一、含义当我们对服务器进行优化的时候,首先需要明白优化的依据是什么,需要针对什么进行优化而不是盲目的去优化,那本人觉得QPS这个值值得参考(前提是内存、带宽、I/O满足条件),通过这个值我们可以针对性的去优化。二、获取QPS每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡...

2019-05-17 18:21:21 3125

原创 获取服务器最大QPS

获取服务器最大QPS一、概念QPS最大值得获取和服务器CPU、内存、I/O有密切关联必须满足条件才能测出来。 系统CPU利用率:如果系统的CPU使用率已经很高,说明我们的系统是个计算度很复杂的系统,这时候如果QPS已经上不去了,就需要赶紧扩容,通过增加机器分担计算的方式来提高系统的吞吐量。 系统内存:如果CPU...

2019-05-17 14:20:54 4390

转载 ab压测工具

ab压测工具[root@localhost ~]$ yum install -y httpd-tools # 安装ab工具[root@localhost ~]$ ab -c 10 -n 1000 http://www.91cnm.com/ # 指定并发请求数为10,...

2019-05-17 14:10:06 277

原创 ThinkPHP5.1框架之Loader加载基础文件

Loader加载基础文件

2019-05-09 16:13:32 1877

翻译 Python爬虫实例

Python爬虫实例 SpiderMain(调度器) # -*- coding: utf-8 -*-import url_manager, html_downloader, html_parser, html_outputerclass SpiderMain(object): # 初始化各个模...

2019-04-26 16:31:57 5478 4

翻译 Python爬虫设计思路

Python爬虫设计思路一、爬虫架构爬虫调度端:一般指的入口函数,发起动作的入口。 URL管理器:存放待爬取网站的URL和已爬取过的URL的功能(python内存、关系数据库、缓存数据库)。 网页下载器:进行页面爬取的功能(Requests、urllib2)。 网页解析器:对爬取下来的数据进行清洗(Beautifu...

2019-04-25 14:21:56 5197

原创 浏览器HTTP请求头header缓存No.8

浏览器HTTP请求头header缓存一、静态资源缓存对于PHP输出的内容,如果不是需要经常变动的内容(例如伪静态的一些页面,PHP输出JS或者CSS),使用PHP合理设置HTTP响应头添加缓存设置,让浏览器尽可能缓存下内容,在刷新和再次访问同样内容时,便不需要再次请求浏览器,从而能够大幅减少服务器的响应次数,同时浏览...

2019-04-19 18:18:59 6399

原创 计算机内核

计算机内核一、内核概念内核是操作系统最基本的部分,它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。直接对硬件操作是非常复杂的,所以内核通常提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁,统...

2019-04-19 17:50:57 4985

原创 linux编译安装时常见错误解决办法

linux编译安装时常见错误解决办法configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution复制代码 代码如下:yum -y install libxslt-develconfigure: err...

2019-03-16 15:19:38 14849 2

原创 高可用架构

高可用架构一、什么是高可用高可用性指的是通过尽量缩短因日常维护操作和突发的系统崩溃所导致的停机时间,以提高系统和应用的可用性。二、导致系统不可用的因素服务器磁盘空间耗尽 ,备份或者各种查询日志突增导致的储存空间被沾满。mysql由于无法记录二进制日志,无法处理新的请求而产生的系统不可用的故障。 性能糟糕的...

2017-12-27 15:08:44 1432

原创 mysql大事务带来的问题

大事务带来的问题一、什么是大事务定义:运行时间比较长,操作的数据比较多的事务。 大事务风险:1、锁定太多的数据,造成大量的阻塞和锁超时,回滚所需要的时间比较长。2、执行时间长,容易造成主从延迟。 如何处理大事务:1、避免一次处理太多大数据。2、移出不必要在事务中的select操作二、什么是事务1.原子性:一个......

2017-12-19 14:52:17 17237 2

原创 linux系统资源查看

系统资源查看  1、vmstat命令监控系统资源vmstat   刷新延时   刷新次数    #vmstat  1   32、dmesg开机时内核检测信息       #dmesg  | grep cpu3、free命令查看内存使用状态#free [-b|-k|-m|-g]选项:以字节、KB、MB、GB为单位显示,默认KB4、查看CPU

2017-11-28 15:47:46 892

转载 nginx配置文件详解

nginx配置文件详解 全局块:配置影响nginx全局的指令。一般有运行nginx服务器的用户组,nginx进程pid存放路径,日志存放路径,配置文件引入,允许生成worker process数等。1.指定当前运行nginx服务的用户#user administrator;  #配置用户或者组,默认为nobody nobody。2.nginx进程数,通常等于CPU数量或

2017-09-21 15:20:33 4835

原创 使用NAT模式联网

虚拟机网络连接使用NAT模式虚拟机网络连接使用NAT模式,物理机网络连接使用Vmnet8。1.虚拟机设置里面——网络适配器,网络连接选择NAT模式。2.虚拟机菜单栏—编辑—虚拟网络编辑器,选择Vmnet8 NAT模式,并取消掉"使用本地DCHP服务来分配虚拟机的ip地址"的勾以便固定IP3."子网IP"用来控制虚拟机想要的IP网段,"NAT设置"  看一下虚拟机网关,可以用默认的I

2017-09-13 13:26:44 1369 3

原创 PHP利用ImageMagick把PDF转成PNG

PHP利用ImageMagick把PDF转成PNG 一、Windows下实现PHP的DLL扩展下载地址:http://valokuva.org/outside-blog-content/imagick-windows-builds/。 里面有用于PHP不同的版本DLL,要注意和你的版本相同。 把下载好的DLL改名成 php_imagick......

2017-09-08 17:46:32 11225 1

原创 第一讲:如何使用go-client连接k8s

gin管理k8s

2022-09-02 10:33:42 1698 1

原创 Kubeadm方式快速搭建K8S集群1.20版本

Kubeadm方式快速搭建K8S集群1.20版本

2022-08-31 13:27:00 541

原创 5_整体架构优化

基本概念分布式系统中的多个模块在不同服务器上部署,即可称为分布式系统,用户服务、商品服务、mysql服务、redis服务。高可用系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性。集群一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Etcd中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能

2021-04-26 10:40:30 403

原创 6_秒杀业务设计

1. 什么是秒杀秒杀分为三种方式:1、限量秒杀:此种秒杀形式商家提供一定数量的商品,直至秒完即止。2、限时限量秒杀:商家提供一定数量的商品,在规定的时间内,无论商品是否秒杀完毕,该场秒杀都会结束。3、限时抢购:商家提供足够数量的商品,时间到则该场秒杀结束。2. 秒杀的业务特点1、瞬时并发量大:大量用户会在同一时间抢购,网站流量瞬间激增。2、库存少:一般都是低价限量,而访问的数量远远大于库存数量,只有极少数人成功。3、业务流程简单:流程短,立即购买,下订单,减库存。4、前期预热:对于还未开启

2021-04-26 10:39:27 274

原创 5_整体架构优化

基本概念分布式系统中的多个模块在不同服务器上部署,即可称为分布式系统,用户服务、商品服务、mysql服务、redis服务。高可用系统中部分节点失效时,其他节点能够接替它继续提供服务,则可认为系统具有高可用性。集群一个特定领域的软件部署在多台服务器上并作为一个整体提供一类服务,这个整体称为集群。如Etcd中的Master和Slave分别部署在多台服务器上,共同组成一个整体提供集中配置服务。在常见的集群中,客户端往往能够连接任意一个节点获得服务,并且当集群中一个节点掉线时,其他节点往往能

2021-04-26 10:38:43 281

原创 4_单机服务端优化

重复提交优化:js层面,在用户点击提交订单后禁用按钮。使用Redis incrde 原子性递增计数//针对同一单生成固定唯一标识orderNum=memberId+productId;//条数加1count = redis.increment(orderNum, 1); //添加过程中会返回当前总数if (count == 1) { //设置有效期2秒 redis.expire(orderNum, 2, TimeUnit.SECONDS);}if (count > 1)

2021-04-26 10:38:13 108

原创 3_单机前端优化

防盗链处理把一些恶意的请求拒之门外。如:现在有A,B两个站,A站 想用 B站 的资源,直接在页面嵌入了一些图片,JS,CSS,本身来说,A站并不关心B站会消耗多少流量,但是对于B站来说,如果我们调用了B站的一些图片,JS或者CSS,都会对它做一个HTTP请求,就会消耗流量和带宽,所以本身对B站来说,会有不好的影响。从另一个角度来说,也侵犯了B站的版权问题,因此在这儿,要做防盗链处理,这是流量的优化。减少HTTP请求假设打开一个界面,可以把一些CSS,JS文件,图片进行合并,这样做虽然会使文件变大,但是

2021-04-26 10:37:16 89

原创 2_服务外部QPS

TPSTPS:意思是每秒事务数,可以一个接口、多个接口、一个业务流程等等。一个事务是指事务内第一个请求发送到接收到响应的过程,以此来计算使用的时间和完成的事务个数。获取TPS可以增对网站的某个访问量最大的接口进行统计,使用redis的string自增策略,统计高峰期时间段的tpsTPS = 处理一个流程的总数量 /高峰时间段 TPS即每秒处理操作事务数,包括了 1)用户请求服务器 2)服务器自己的内部处理 3)服务器返回给用户QPSQPS:意思是“每秒查询率”,是一台服

2021-04-26 10:36:37 133

原创 1_服务承受QPS

查询服务器最大QPSQPS最大值得获取和服务器CPU、内存、I/O有密切关联必须满足条件才能测出来。系统CPU利用率:如果系统的CPU使用率已经很高,说明我们的系统是个计算度很复杂的系统,这时候如果QPS已经上不去了,就需要赶紧扩容,通过增加机器分担计算的方式来提高系统的吞吐量。系统内存:如果CPU使用率一般,但是系统的QPS上不去,说明我们的机器并没有忙于计算,而是收到其他资源的限制,如内存、I/O。这时候首先看下内存是不是已经不够了,如果内存不够了,那就赶紧扩容了。ab压测安装ab工具[

2021-04-26 10:36:10 448

原创 go将外部图片转为base64

//base64 //获取远端图片 res, err := http.Get("www.baidu.com/1.png")//外部图片 if err != nil { return err } defer res.Body.Close() // 读取获取的[]byte数据 data, _ := ioutil.ReadAll(res.Body) req.Image = base64.StdEncoding.EncodeToString(data)...

2021-03-30 11:37:11 852

原创 go原生httpServer封装

main.gopackage mainimport ( "log" "test/router")func main() { r := router.NewServer("8080") if err := r.ListenAndServe(); err != nil { log.Fatal(err) }}router/router.gopackage routerimport ( "net/http" "test/controller" "time")func

2021-03-26 14:17:27 241

原创 go原生http请求封装

package mainimport ( "bytes" "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "time")func main() { //get // https://test.pet-dbc.cn/api/user/info?name=yuyu params :=map[string]string{ "name":"yuyu", } res,err := httpDo("https://tes

2021-03-25 13:59:07 1420

原创 go接入etcd客户端使用

client代码逻辑创建etcd解析器(Resolver)解析器注册到grpc/resolver使用名称拨号:scheme://authority/endpoint_name应用负载均衡策略获取服务端连接改造代码,无限循环调用服务客户端连接服务器#EtcdAddr etcd服务端r := etcdservice.NewResolver(EtcdAddr) resolver.Register(r)#ServiceName : grpc服务名称#grpc.Wi

2021-03-23 09:44:02 514

原创 go接入etcd服务端使用

server代码逻辑将grpc服务注册到etcd#EtcdAddr指的是etcd服务的地址,多个用“;”隔开#ServiceName指的是Gprc服务名称,#addr指的是grpc服务的ip地址#5指的是租约5秒过期etcdservice.Register(EtcdAddr, ServiceName, addr, 5)etcd注册服务连接etcd服务器循环心跳检测心跳发生器KeepAlive创建租约(Lease)自动续租(KeepAlive)清空续租响应消息

2021-03-23 09:43:27 702

原创 etcd搭建及使用

etcd搭建version: '3.5'services: etcd1: image: quay.io/coreos/etcd container_name: etcd1 restart: always volumes: - ./data:/etcd-data command: etcd -name etcd1 - --data-dir=/etcd-data -advertise-client-urls http://0.0.0.0:2379 -l

2021-03-23 09:42:50 745

原创 etcd概述

etcd概述etcd 是一个分布式、可靠 key-value 存储的分布式系统。当然,它不仅仅用于存储,还提供共享配置及服务发现。etcd vs Zookeeper区别提s供配置共享和服务发现的系统比较多,其中最为大家熟知的是 Zookeeper,而 etcd 可以算得上是后起之秀了。在项目实现、一致性协议易理解性、运维、安全等多个维度上,etcd 相比 zookeeper 都占据优势,Consul 的可靠性和稳定性还需要时间来验证。一致性协议: etcd 使用 Raft 协议,Zookeeper

2021-03-23 09:41:44 461 2

原创 POST提交数据方式

HTTP协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。 但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 framework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type 字段来获知请求中的消息主体是用何种方式编码,再对主体

2020-07-25 14:54:28 344

原创 二分查找No.21

必须是一个有序数组 思路: 代码示例package mainimport "fmt"func BinarySearch(arr *[6]int,leftIndex int,rightIndex int ,findVal int ){ if leftIndex > rightIndex{ fmt.Printf("%v中找不到\t元素%v\n",(*arr),findVal) return } //先找到中间下标 midddle

2020-07-23 08:36:58 191

原创 归并排序No.20

一、归并排序介绍归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer) 策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修 补"在一起,即分而治之)。 基本思想 将序列中待排序数字分为若干组,每个数字分为一组 将若干个组两两合并,保证合并后的组时有序的 重复第二步操作直到只剩下一组,排序完成 ...

2020-07-22 20:44:15 158

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除