- 博客(22)
- 收藏
- 关注
原创 初识Nginx (一)
初识Nginx (一)Nginx适用于哪些场景一个web请求从红色箭头进来后,会先经过Nginx,然后进入应用程序,然后再去访问数据库或缓存服务。那么这里有一个问题,我们的应用服务要求的开发效率很高,所以运行效率是很低的,它的qps、tps或者并发都是受限的。所以需要把很多这样的应用程序组成一个集群,来提供高可用服务,集群对外服务需要Nginx提供反向代理功能,可以把动态请求传递给应用服务。多个应用构成集群,一定会带来两个需求:动态扩容和当服务出问题时候的容灾。所以反向代理必须具备负载均衡功能。
2022-05-03 21:43:32
1154
原创 MySQL分库分表方案
MySQL分库分表方案一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。第二种:网络IO瓶颈,请求的数据太多,网络带宽不够 -> 分库。2、CPU瓶颈第一种:SQL问题
2021-02-26 14:10:19
87
原创 MySQL数据库规范
MySQL数据库规范规范背景和目的MySQL数据库与 Oracle、SQL Server 等数据库相比,有其内核上的优势与劣势,我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导开发人员做出适合线上业务的数据库设计,在数据库变更、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。适用范围及监管本规范暂时仅适用于新、旧系统中新建立的数据库、表、SQL语句等,对于已经在使用的,不做强制要求,可以在后续的变更中逐步按照规范进行调整。数据库设
2021-02-26 14:09:46
171
原创 共识算法 Paxos
Paxos 算法Paxos 问题是指分布式的系统中存在故障(crash fault),但不存在恶意(corrupt)节点的场景(即可能消息丢失或重复,但无错误消息)下的共识达成问题。这也是分布式共识领域最为常见的问题。因为最早是 Leslie Lamport 用 Paxon 岛的故事模型来进行描述,而得以命名。解决 Paxos 问题的算法主要有 Paxos 系列算法和 Raft 算法。作为后来...
2018-11-12 14:04:17
236
原创 Go语言学习笔记(九)并发
并发性ConcurrencyGo是并发语言,而不是并行语言。在讨论如何在Go中进行并发处理之前,我们首先必须了解什么是并发,以及它与并行性有什么不同。(Go is a concurrent language and not a parallel one. )并发性Concurrency是同时处理许多事情的能力。举个例子,假设一个人在晨跑。在晨跑时,他的鞋带松了。现在这个人停止跑步,系鞋...
2018-11-07 13:32:10
297
1
原创 共识算法 分布式一致性协议 Raft
什么是Raft让我们假设有一个单一节点系统,你可以将节点视为存储单个值的数据库服务器。同时有一个客户端可以发送数据到服务器,在一个节点上达成一致或共识是很容易的:但是如果我们有很多个节点该如何达成共识?这个问题就叫做分布式共识协议概述Raft是实现分布式共识的协议。让我们看一下它是如何工作的。假设一个节点可以为三种状态中的一种:跟随者(Follower)候选者(Candidate ...
2018-11-06 01:19:46
312
原创 Go语言学习笔记(八) 面向对象
go并不是一个纯面向对象的编程语言。在go中的面向对象,结构体替换了类。Go并没有提供类class,但是它提供了结构体struct,方法method,可以在结构体上添加。提供了捆绑数据和方法的行为,这些数据和方法与类类似。定义结构体和方法创建一个外部可访问的Employee结构体,并为这个结构体定义一个方法LeavesRemaining()package employeeimp...
2018-11-05 17:08:23
235
原创 Go语言学习笔记(七) 系统类型
系统类型对于面向对象编程的支持Go 语言设计得非常简洁而优雅。简洁之处在于,Go语言并没有沿袭传统面向对象编程中的诸多概念,比如继承、虚函数、构造函数和析构函数、隐藏的this指针等。优雅之处在于,Go语言对面向对象编程的支持是语言类型系统中的天然组成部分。整个类型系统通过接口串联,浑然一体。在Java语言中,存在两套完全独立的类型系统:一套是值类型系统,主要是基本类型,如byte、int...
2018-10-18 11:50:42
324
原创 Go语言学习笔记(六) 错误处理
error接口Go语言引入了一个关于错误处理的标准模式,即error接口,该接口的定义如下:type error interface {Error() string}对于大多数函数,如果要返回错误,大致上都可以定义为如下模式,将error作为多种返回值中的最后一个,但这并非是强制要求:func Foo(param int)(n int, err error) {// ....
2018-10-12 16:16:38
192
原创 Go语言学习笔记(五) 函数
函数定义函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。func (p mytype) funcname(q int) (r, s int) { return 0, 0}func:保留字func 用于定义一个函数 (p mytype):可省略。函数可以定义用于特定的类型,比如这个函数只有mytype类型才可...
2018-10-09 16:59:50
186
原创 Go语言学习笔记(四) 流程控制
程序设计语言的流程控制语句,用于设定计算执行的次序,建立程序的逻辑结构。可以说,流程控制语句是整个程序的骨架。从根本上讲,流程控制只是为了控制程序语句的执行顺序,一般需要与各种条件配合,因此,在各种流程中,会加入条件判断语句。流程控制语句一般起以下3个作用:选择,即根据条件跳转到不同的执行序列; 循环,即根据条件反复执行某个序列,当然每一次循环执行的输入输出可能会发生变化; 跳转,即根据条...
2018-10-09 16:56:54
186
原创 Go语言学习笔记(三) 集合类型
数组数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。[32]byte // 长度为32的数组,每个元素为一个字节[2*N] struct { x, y int32 } // 复杂类型数组[1000]*float64 // 指针数组[3][5]int // 二维数组[2][2][2]float64 // 等同于[2]([2]([2]fl...
2018-09-27 17:50:13
347
原创 Go语言学习笔记(二) 基本语法、变量、常量、类型
基本语法Go语言中的标记Go程序是由各种标记组成的,标记可以是关键字,标识符,常量,字符串文字或符号。例如,以下Go语句由六个标记组成:fmt.Println("Hello, World!")每个标记单独表示为:fmt.Println("Hello, World!")行分隔符在Go程序中,行分隔符键是语句终止符。 也就是说,每个单独的语句不需要特殊的分隔符...
2018-09-21 12:56:08
217
1
原创 Go语言学习笔记(一) 简介、安装
为什么选择Go编程语言已经非常多,偏性能敏感的编译型语言有 C、C++、Java、C#、Delphi和Objective-C等,偏快速业务开发的动态解析型语言有PHP、Python、Perl、Ruby、JavaScript和Lua等,面向特定领域的语言有Erlang、R和MATLAB等,那么我们为什么需要 Go这样一门新语言呢?Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发...
2018-06-26 15:50:05
151
原创 Linux Shell命令(四) 循环语句 函数
for循环与其他编程语言类似,Shell支持for循环。for循环一般格式为:for 变量 in 列表do command1 command2 ... commandNdone列表是一组值(数字、字符串等)组成的序列,每个值通过空格分隔。每循环一次,就将列表中的下一个值赋给变量。in 列表是可选的,如果不用它,for 循环使用命令行的位置参数。范例1顺序输出当前...
2018-06-20 10:46:37
1002
原创 Linux Shell命令(三) 条件语句 函数
命令执行的判断依据: ; , &&, ||1、无条件继续执行:分号;在某些时候,我们希望一次执行多个命令,也就是说,执行完一条命令后,无条件的执行下一条命令。我们可以在指令与指令中间利用分号 (;) 来隔开,这样一来,分号前的指令执行完后, 就会立刻接着执行后面的指令了。例如关机时,希望我可以先执行两次 sync ,然后才 shutdown 计算机,那么可以这样做:$ sync; ...
2018-06-19 10:15:44
426
原创 Linux Shell命令(二) 数据类型 表达式
字符串字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没啥其它类型好用了),字符串可以用单引号,也可以用双引号,也可以不用引号。单双引号的区别跟PHP类似。单引号str='this is a string'单引号字符串的限制:单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;单引号字串中不能出现单引号(对单引号使用转义符后也不行)。双引号your_name='qin...
2018-06-15 10:28:20
321
原创 Linux Shell命令(一)简介 变量
shell简介Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Unix/Linux系统内核的一部分,但它调用了系统核...
2018-06-06 15:51:50
315
原创 Java虚拟机 程序编译
主要内容javac编译器java语法糖编译期概述Java 语言的“编译期”可能为以下3中编译过程:前端编译器:即编译器的前端,把.java文件转变为.class文件。JIT编译器:把字节码转变为机器码。AOT编译器:直接把.java转变为本地机器码。javac编译器10.2.1 javac的源码与调试解析与符号填充词法分析:将源代码的字符流转为标记(token)集合。如”int a = b+2”这...
2018-04-18 23:22:21
1254
原创 Java虚拟机 虚拟机执行子系统
代码编译的结构从本地机器码转变为字节码,是储存格式发展的一小步,却是编程语言发展的一大步。主要内容类文件结构虚拟机类加载机制虚拟机字节码执行引擎类文件结构无关性基石各种不同的虚拟机都可以载入和执行一种平台无关的字节码,从而实现“一次编写,到处运行”。语言无关性越来越受到开发者重视,java只是运行在java虚拟机上的一种语言。实现语言无关性的基础是虚拟机和字节码储存格式,使用java编译器可以把j...
2018-04-13 20:19:58
328
原创 Linux下redis安装以及远程访问 搭建过程综合整理
虚拟机以及linux安装VMware安装,我安装的版本是14.1.1.28517虚拟机以及linux安装过程传送门:点击打开链接,虚拟机简简单单的典型安装就行虚拟机安装后需要激活,激活码传送门:点击打开链接linux系统用的是centos7linux系统安装时候需要注意的是最好不要选择最下化安装,要不然之后安装redis的时候会遇到很多麻烦,比如安装失败,需要先安装gcc、tcl等等-------...
2018-03-28 16:56:19
188
转载 Java虚拟机 内存管理与垃圾回收
java和C++之间有一堵由内存自动分配与垃圾回收所围成的高墙,外面的人想进来,里面的人想出去主要内容内存分布垃圾回收机制垃圾收集器Java内存分布当java虚拟机运行程序时,会把由虚拟机管理的内存划分为不同的区域,他们的作用不同,创建和销毁时间也不同,有的是虚拟机完全控制,有的是依赖用户的启动和结束而建立和销毁。仅仅是组成图,并不代表实际占用大小。比如程序计数器只占很小空间线程隔离就是不同线程之...
2018-03-25 23:27:42
133
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人