自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

清扬叶

工程师

  • 博客(118)
  • 资源 (1)
  • 收藏
  • 关注

原创 RESTful接口设计

RESTful是一种流行的接口设计规范,不是标准,只是提供了一组设计原则和约束条件。RESTful解决了什么问题?后端服务接口设计混乱、不易理解、扩展不方便、没有一个标准、命名混乱。使用了Restful风格设计接口可以让后端提供的接口更加结构清晰、符合标准、易于理解、扩展方便。Restful接口主要特征:1 以资源为基础:面向资源来设计接口,资源可以是图片,后端的服务对象,用户数据等。2 统一的接口:对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、P

2021-11-26 15:35:37 546

原创 分布式理论---Quorum 机制

一. WARO机制 WARO(Write All Read one)是一种简单的副本控制协议,当Client请求向某副本写数据时(更新数据),只有当所有的副本都更新成功之后,这次写操作才算成功,否则视为失败。从这里可以看出两点:①写操作很脆弱,因为只要有一个副本更新失败,此次写操作就视为失败了。②读操作很简单,因为,所有的副本更新成功,才视为更新成功,从而保证所有的副本一致。这样,只需要读任何一个副本上的数据即可。假设有N个副本,N-1个都宕机了,剩下的那个副本仍能提供读服务;但是只要有...

2021-09-29 10:36:31 328

原创 云原生---Serverless

Serverless是指构建和运行不需要服务器管理的应用程序的概念。 Serverless 产品表的是无需理解、管理服务器,按需使用,按使用付费的产品。Serverless 产品中,其实也可以包含存储、计算等多种类型的产品。而典型的计算产品,就是云函数这种形态。 云函数,或者称为函数即服务 (Function as a Service),它和后端即服务 (Backend as a Service) 一起,都可以称为 Serverless 产品。通过组合使用这些...

2021-09-28 20:28:13 859

原创 云原生---ServiceMesh

Service Mesh的定义: 服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。 Service Mesh 将底层那些难以控制的网络通讯统一管理,诸如:流量管控,丢包重试,访问控制等。而上层的应用层协议只需关心业务逻辑即可。Service Mesh 是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原...

2021-09-28 20:22:51 289

原创 微服务架构---康威定律

康威定律核心观点,如下:第一定律:Communication dictates design(组织沟通方式会通过系统设计表达出来)第二定律:There is never enough time to do something right, but there is always enough time to do it over(时间再多一件事情也不可能做的完美,但总有时间做完一件事情)第三定律:There is a homomorphism from the linear graph of..

2021-09-28 19:54:36 145

原创 声明式编程VS命令式编程

In computer science, declarative programming is a programming paradigm — a style of building the structure and elements of computer programs—that expresses the logic of a computation without describing its control flow. This is in contrast with imperative.

2021-09-28 19:37:59 101

原创 分布式算法---zab算法

ZAB 协议全称:Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。Zookeeper 是一个为分布式应用提供高效且可靠的分布式协调服务。在解决分布式一致性方面,Zookeeper 并没有使用 Paxos ,而是采用了 ZAB 协议。 ZAB 协议定义:ZAB 协议是为分布式协调服务 Zookeeper 专门设计的一种支持 崩溃恢复 和 原子广播 协议。下面我们会重点讲这两个东西。 基于该协议,Zookeeper 实现了一种 主备模式 的系统架构来保持集群中各个

2021-09-28 19:17:58 131

原创 分布式算法---gossip 协议

gossip 协议(gossip protocol)又称 epidemic 协议(epidemic protocol),是基于流行病传播方式的节点或者进程之间信息交换的协议,在分布式系统中被广泛使用,比如我们可以使用 gossip 协议来确保网络中所有节点的数据一样。Gossip协议是基于六度分隔理论(Six Degrees of Separation)哲学的体现,简单的来说,一个人通过6个中间人可以认识世界任何人。数学公式是:n表示复杂度,N表示人的总数,W表示每个人的联系宽度。依据邓巴数,即每个

2021-09-28 18:50:49 350

原创 分布式算法---Raft

Raft是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos。但Paxos是:少数真正理解的人觉得简单,尚未理解的人觉得很难,大多数人都是一知半解。本人也花了很多时间、看了很多材料也没有真正理解。直到看到raft的论文,两位研究者也提到,他们也花了很长的时间来理解Paxos,他们也觉得很难理解,于是研究出了raft算法。 raft是一个共识算法(consensus algorithm),所谓...

2021-09-28 15:34:00 267

原创 分布式算法---拜占庭将军问题

一. 拜占庭将军问题 拜占庭将军问题(Byzantine failures),是由莱斯利·兰伯特提出的点对点通信中的基本问题。含义是在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的[1]。 1.简介 拜占庭将军问题是一个协议问题,拜占庭帝国军队的将军们必须全体一致的决定是否攻击某一支敌军。问题是这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,...

2021-09-27 19:59:55 1074

原创 分布式算法---Multi Paxos

Multi Paxos 算法是一种Paxos算法的改进版本。 Multi Paxos 对 Basic Paxos 的核心改进是增加了“选主”的过程,提案节点会通过定时轮询(心跳),确定当前网络中的所有节点里是否存在有一个主提案节点,一旦没有发现主节点存在,节点就会在心跳超时后使用 Basic Paxos 中定义的准备、批准的两轮网络交互过程,向所有其他节点广播自己希望竞选主节点的请求,希望整个分布式系统对“由我作为主节点”这件事情协商达成一致共识,如果得到了决策节点中多数派的批准,...

2021-09-27 19:12:04 466

原创 分布式算法---Paxos 算法

Paxos发布Lamport 最初在 1990 年首次发表了 Paxos 算法,选的论文题目就是“The Part-Time Parliament”。由于算法本身极为复杂,用希腊城邦作为比喻反而使得描述更为晦涩,论文的三个审稿人一致要求他把希腊城邦的故事删除掉,这令 Lamport 感觉颇为不爽,然后干脆就撤稿不发了,所以 Paxos 刚刚被提出的时候并没有引起什么反响。八年之后(1998 年),Lamport 再次将此文章重新整理后投到《ACM Transactions on Computer Sys

2021-09-27 17:25:08 219

原创 微服务架构---服务注册和服务发现

微服务架构中最核心的部分是服务治理,服务治理最基础的组件是服务注册和服务发现。随着微服务架构的发展,出现了很多微服务架构的解决方案,其中包括我们熟知的Dubbo和Spring Cloud。 关于服务注册和服务发现的解决方案,dubbo支持了zookeeper、redis、multicast和simple,官方推荐zookeeper。Spring cloud支持了Eureka、zookeeper、Consul、nacos,官方推荐了Eureka。Spring Cloud Ali为了同时支持dubbo...

2021-09-27 11:10:20 736

原创 elastic-job作业分片算法

elastic-job作业分片策略elastic-job有以下分片策略:1. AverageAllocationJobShardingStrategy分片策略2. OdevitySortByNameJobShardingStrategy分片策略3. RotateServerByNameJobShardingStrategy分片策略并且支持还支持自定义分片策略AverageAllocationJobShardingStrategy分片策略,即基于平均分配算法的分片策略,是默认的分片策略。对应

2020-10-28 10:13:28 1490

原创 LeetCode 247. 中心对称数

1. 题目中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。找到所有长度为 n 的中心对称数。示例 :输入: n = 2输出: ["11","69","88","96"]2. 解题add1 = {"0","1","8"},add2 = {"00","11","69","88","96"} i 是奇数,我们在 i-1 偶数的基础上每个数中间位置 add1 i 是偶数,我们在 i-2 偶数的基础上每个数中间位置 add2package co.

2020-07-09 10:46:51 1510

原创 linux系统句柄数命令

查看当前系统支持打开的最大句柄数Linux的/proc/sys/fs/file-max决定了当前内核可以打开的最大的文件句柄数。cat /proc/sys/fs/file-max修改系统最大打开文件描述符数:临时设置:echo 1000000 > /proc/sys/fs/file-max永久设置:修改/etc/sysctl.conf文件,增加fs.file-max = 1000000查看系统fd总数:准确的查看fd使用总数的命令是:cat /proc/sys/fs/f..

2020-06-18 16:58:29 3107

原创 lsof命令使用场景

lsof命令:是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。lsof输出列的含义:COMMAND:进程的名称 PID:进程标识符USER:进程所有者FD:文件描述符,应用程序通过文件描述符识别该文件。如cwd、txt等 TYPE:文件类型,如DIR、REG等DEVICE:指定磁盘的名称SIZE:文件的大小NODE:索引节点(文件在磁盘上的标识)NAME:打开文件的确...

2020-06-17 20:09:34 222

原创 nginx 轮询转发请求不均衡

后端服务配置,一台116服务器用于nginx转发请求,使用轮询的负载均衡策略;两台后端API接口服务器57和117,用于处理请求。 现象背景:当对指定接口进行压力测试的时候,会出现绝大部分的请求都转发到57服务器,而117服务器上只有少量的请求。 问题定位:查看nginx的error日志发现,出现大量报错:2020/06/16 14:23:00 [error] 4950#4950: *4162133210 no live upstreams while...

2020-06-16 11:05:50 2937

原创 redis引入lua优势

Lua是一种功能强大,高效,轻量级,可嵌入的脚本语言。redis中Lua 脚本功能是 Reids 2.6 版本的最大亮点, 通过内嵌对 Lua 环境的支持, Redis 解决了长久以来不能高效地处理 CAS (check-and-set)命令的缺点, 并且可以通过组合使用多个命令, 轻松实现以前很难实现或者不能高效实现的模式。 redis中引入lua的优势:减少网络开销:多个请求通过脚本一次发送,减少网络延迟 原子操作:将脚本作为一个整体执行,中间不会插入其他命令,无需...

2020-05-27 19:51:30 1581

原创 redis应该如何删除集合

背景在redis的命令接口中,没有专门针对list,set,hash等数据结构的key删除命令,只有指定到删除具体的对象的操作命令。比如删除list列表的元素命令LREM,删除set集合中一个或多个元素命令SREM,删除hash中一个或多个元素HDEL。而在redis的一些使用中还是可能遇到对这些集合类对象整体删除的场景如:场景1:当用户的信息使用hash结构储存时,需要删除整个用户的信息场景2:删除大V的粉丝列表DEL在redis4.0之前可以用del命令直接删除key,但是由于re.

2020-05-27 19:24:21 5501

原创 rabbitmq应用--死信队列

一. rabbitmq死信队列 死信(dead letter)是Rabbitmq的一种消息机制,当消息没有及时消费时,消息就变成死信。出现消息没有消费的情况如下: 1.消息被否定确认,使用 channel.basicNack 或 channel.basicReject ,并且此时requeue 属性被设置为false; 2.消息在队列的存活时间超过设置的TTL时间; 3.消息队列的消息数量已经超过最大队列长度。 死信消息会被RabbitMQ进行特殊处理,如果配置了死信队列信息...

2020-05-26 19:55:29 576

原创 解决docker占满磁盘问题

在使用docker一段时间后突然出现某个容器进程挂掉,然后再去重新启动都会失败,这是可能需要看看是不是docker把磁盘占满了。下面详细介绍一下我遇到docker占满磁盘的经历。 某天上午测试突然反馈内网测试环境业务出现问题,功能不能正常使用,于是赶紧查看日志定位,发现是zookeeper连接异常了,zookeeper是使用docker部署,一般不会出现问题。 执行do...

2020-04-29 23:54:17 8176

原创 centos系统中安装openresty

一. openresty安装添加openresty仓库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo 2. 安装软件包 sud...

2020-04-28 06:45:15 330

原创 根据IP免费查询对应运营商信息

1.利用 ip138.com 获取相关信息 如:https://ip138.com/iplookup.asp?ip=88.88.88.88&action=22.www.cip.cc 如:http://www.cip.cc/8.8.8.83.淘宝接口 http://ip.taobao.com/service/getIpInfo.php?ip=18.8...

2020-04-21 20:23:05 12910

原创 查看进程使用的GC类型

1.查看进程使用的GC类型 查询看Java程序进程 id [root@localhost log]# ps -ef |grep java root 11740 1 1 18:56 pts/0 00:00:39 java -Djava.security.egd=file:/dev/./urandom -jar -server -Xmx8...

2020-04-21 20:09:22 2453

原创 linux下查看硬盘型号、大小等信息

1.查看硬盘型号 fdisk -l //查看你的硬盘编号,如sda,sdb 等[root@root web]# fdisk -lDisk /dev/sda: 300.0 GB, 299966445568 bytes, 585871964 sectorsUnits = sectors of 1 * 512 = 512 bytesSector size (log...

2020-04-15 09:57:42 36824

原创 Linux crontab定时任务

linux内置的cron进程可以帮忙我们实现定时任务的需求,cron搭配shell脚本,能够完成复杂的指令。crond crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具。 可以使用以下的方法启动、关闭这个服务: /sbin/service crond start...

2020-04-13 09:47:37 100

原创 查询linux系统启动时间

linux系统启动时间查询 1.last命令 [root@apollo data]# last reboot reboot system boot 3.10.0-957.10.1. Tue Mar 10 12:41 - 23:35 (23+10:53) reboot system boot 3.10.0-957.10.1. Tue No...

2020-04-02 23:58:41 641

原创 rabbitmq安装部署

一. 系统环境: 操作系统:[root@localhost rabbitmq]#cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) erlang:otp_src_21.2.tar.tar 下载地址:http://www.erlang.org/downloads rabbit...

2020-04-02 23:24:10 137

原创 redis的config命令

Redis的配置文件位于Redis安装目录下,文件名为redis.conf可以通过CONFIG命令查看或设置配置项。Redis CONFIG 查询命令格式如下: redis 127.0.0.1:6379> CONFIG GET {CONFIG_SETTING_NAME}1.使用*号获取所有配置项: redis 127.0.0.1:6379> CONFIG...

2020-04-02 09:36:09 844

原创 Redis安全漏洞

Redis安全漏洞 Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 ...

2020-04-01 19:12:52 983

原创 linux挖矿病毒分析

发现问题: 在查询进程端口号占用时,发现查询特别慢,而当时运行的程序又很少,于是执行top命令发现存在一个networkservice进程的cpu占用率超过了100%,如图所示: networkservice和sysupdate都不是我们自己的运行程序,于是百度了一下,发现是linux挖矿病毒。处理问题: 使用top查询到networkservice和...

2020-04-01 11:11:54 1499

原创 docker常用命令

1. 启动docker服务 systemctl start docker 或者service dockerstart2. 停止docker服务 systemctl stop docker或者service docker stop3.重启docker服务 systemctl restart docker4. 进入docker容器 进入容器...

2020-03-28 22:15:47 101

原创 git工具mergetool

当git代码合并时,出现冲突时,如下执行git pull 或者 git merge mater:解决git代码冲突比较好的办法是借助mergetool,输入git mergetool得到:出现图像化界面,其中左上区表示要合入的版本,右上区表示待合入版本,下方是可修改版本,需要点击右键选择需要使用的版本,修改完以后保存退出即可。然后执行一下命令:git commit...

2020-03-27 09:19:01 9835 1

原创 限流算法及其应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流。限流(Rate Limit),限流的目的是为了保护系统不被瞬时大流量冲垮,常见的应用场景类似秒杀,大促峰值QPS在2w以上。目前比较常见的限流算法有:计数器固定窗口算法 计数器滑动窗口算法 漏桶算法 令牌桶算法1. 计数器固定窗口算法 计数器固定窗口算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,...

2020-03-23 20:02:14 296

原创 SpringBoot适配Sentinel

Sentinel 介绍随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。Sentinel 具有以下特征: 丰富的应用场景: Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、实时熔断下游不可用应...

2020-03-19 09:35:27 499

原创 linux命令之netstat

netstat命令各个参数说明如下:-a 或–all 显示所有连线中的Socket。-A <网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。-c 或–continuous 持续列出网络状态...

2020-03-18 19:50:17 165

原创 Linux 运行jar包命令 java -jar xx.jar >/dev/null 2>&1 &

Linux 运行jar包命令:1.java -jar XXX.jar //当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出2.java -jar XXX.jar & //&代表在后台运行。当前ssh窗口不被锁定,但是当窗口关闭时,程序中止运行。3.nohup java -jar XXX.jar & ...

2020-03-18 19:17:25 1354 1

原创 linux命令之firewalld

firewalld 是 Linux 机器上管理防火墙规则的工具,默认安装在 RedHat 和 CentOS 上。centos7版本对防火墙进行加强,不再使用原来的iptables,启用firewalld,如要使用iptables,需要安装一.firewalld服务管理查看firewall服务状态 systemctl status firewalld 出现Ac...

2020-03-18 09:16:11 523

原创 git命令

一.git分支操作 查看分支 : git branch 创建分支: git branch <new name> 2. 查询每个分支最后一次提交 : git branch -v $ git branch -v master 3bbc910 代码优化 ...

2020-03-16 08:54:05 92

dengbixuan_userlogin

用户登录,使用了嵌入式数据库sqlite,以及增加了密码保护的功能

2012-10-28

空空如也

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

TA关注的人

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