服务器技术
小山沟里的程序猿
向一个城墙发起冲锋!
展开
-
2万字长文盘点五种负载均衡策略
来源:why公众号荒腔走板老规矩,在技术分享开始之前,先荒腔走板,聊点别的。给枯燥的技术文章注入一抹其它的色彩。上面的图片,是我在骑车的过程中拍的。衣服随意的绑在驼包上,两侧各挂着一只鞋子,左边是一望无际的大草原,右边是笔直的泊油路。我在车尾挂了一个牌子:别急,淡定。我记得拍这张照片的时候,我坐在路边休息的,随手拍了一张照片。现在偶然看见,觉得挺不错的,这句话我是挺想对自己说的。2020 年很快就过去一半了,回想前半年,感觉好像自己还没有什么建树,时间就这样悄悄溜走了。心中难免有转载 2020-07-21 10:01:48 · 490 阅读 · 0 评论 -
接口幂等性解决方案及设计方案
一、背景 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果;2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统bug重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次业务请求只能创建一个,创建...转载 2020-02-16 00:10:36 · 478 阅读 · 0 评论 -
主流开源监控系统汇总
监控做为自动化运维的重要组成部分,承担着反馈的作用。以往,在缺少告警机制的情况下,企业无法第一时间洞悉到系统发生故障,只能通过用户的反馈来获取,系统运维人员往往也只是充当了一个“救火” 队员,大面积的系统瘫痪往往也会给企业和用户带来极大的损失当下,通过监控,企业可以在系统受损的第一时间得到反馈,及时处理问题,大大减小了系统故障对企业和用户造成的影响,更有可以做到无感知的修复。...转载 2020-02-13 23:09:04 · 3658 阅读 · 0 评论 -
【安全】XSS安全漏洞与CSRF攻击
XSS攻击XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各...原创 2020-02-08 21:10:44 · 887 阅读 · 0 评论 -
常见的分布式Id生成器剖析
在高并发或者分表分库情况下怎么保证数据id的幂等性呢?经常用到的解决方案有以下几种。微软公司通用唯一识别码(UUID)Twitter公司雪花算法(SnowFlake)基于数据库的id自增对id进行缓存一、SnowFlake算法snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID。其核心思想是:使用41bit作为毫秒数,10bit作为机...原创 2019-12-20 17:36:58 · 482 阅读 · 0 评论 -
PHP中Session函数底层原理以及session的垃圾回收机制
一、php session函数的原理session_id作用重用现有的回话,如果没有就创建,感觉这个函数作用不是很大,我在php这边打印不好使。session_start作用1、没有会话,根据session.name = PHPSESSID生成Cookie,并发送给客户端。2、打开与介质的连接通道,读取相应的id内容到变量$_SESSION中。session_unset作用...原创 2019-12-20 10:39:52 · 633 阅读 · 0 评论 -
FastDFS从入门到精通(三)之线上高可用运维
本文介绍我在运维中遇到的问题并提出具体解决方案。原创 2020-02-22 23:32:44 · 335 阅读 · 0 评论 -
FastDFS从入门到精通(二)之集群搭建篇
本文主要介绍从零开始搭建一个FastDFS集群,希望对你有所帮助。原创 2020-02-22 17:51:29 · 515 阅读 · 0 评论 -
FastDFS从入门到精通(一)之架构、上传下载同步原理篇
本文主要讲述FastDFS的整体架构、上传,下载基本原理。一、FastDFS介绍FastDFS是一个C语言实现的开源轻量级分布式文件系统,作者余庆(happyfish100),支持Linux、FreeBSD、AID等Unix系统,解决了大数据存储和读写负载均衡等问题,适合存储4KB~500MB之间的小文件,如图片网站、短视频网站、文档、app下载站等,UC、京东、支付宝...原创 2019-12-10 14:00:02 · 865 阅读 · 0 评论 -
Cookie和Session的工作原理以及分布式Session实现方案
一、问题的提出1、为什么需要Cookie和Session?用户使用网站的服务,需要使用浏览器与Web服务器进行多次交互。大家都知道,HTTP协议是无状态的,无状态啥意思?举个栗子夏洛:大爷,楼上322住的是马冬梅家吧?大爷:马都什么?夏洛:马冬梅。大爷:什么都没啊?夏洛:马冬梅啊。大爷:马什么没?夏洛:行,大爷你先凉快着吧。HTTP协议无状态导致的后果:服务器无法分辨...原创 2019-12-08 16:09:14 · 1021 阅读 · 1 评论 -
TCP重连重试机制——记一次线上故障排查思考
一、引言某天早晨,还没起床,就听到群里有人喊sentry报大量1001超时,反馈具体在A机器上,查看A机器的监控,php-fpm进程数被打满,后续请求必须等待,顺藤摸瓜最终发现是该机器的网关挂了,该机器发请求会不断进行重试,请求资源得不到及时释放,导致fpm被打满。二、TCP重试机制在TCP三次握手的过程中,当客户端发送SYN分节之后,如果没有收到服务端返回的确认ACK,那么TCP会在...原创 2019-11-07 23:57:21 · 5069 阅读 · 0 评论 -
OOM问题排查及原因解析
一、前言最近公司线上出了故障,有业务反馈说线上某台机器发出的请求status都是101,代表是超时。于是顺着调用栈和监控去查,最后发现这台机器上的网关挂掉了,所以导致请求发不出去,导致业务超时。那为啥无缘无故的网关挂掉了呢,顺着各种系统日志去查,结合机器是mq消费脚本专用机器,最后从系统日志/var/log/messages中查到如下日志...Out of memory: Kill p...原创 2019-11-07 23:21:01 · 8722 阅读 · 0 评论 -
ChaosBlade权威指南
如果对混沌实验不了解,或者不了解ChaosBlade请先阅读以下三篇文章。1、混沌工程之阿里巴巴Chaosblade2、如何模拟将CPU、IO打满?3、干货 | 阿里巴巴混沌测试工具ChaosBlade两万字解读一、前言ChaosBlade 是一款遵循混沌工程实验原理,建立在阿里巴巴近十年故障测试和演练实践基础上,并结合了集团各业务的最佳创意和实践,提供丰富故障场景实现,帮助分...原创 2019-11-05 22:13:36 · 4570 阅读 · 0 评论 -
史上最全正则表达式语法,文末附常用表达式!
废话少说,直接开始学习!一、元字符元字符是构造正则表达式的一种基本元素。. :匹配除换行符以外的任意字符w:匹配字母或数字或下划线或汉字s:匹配任意的空白符d:匹配数字b:匹配单词的开始或结束^:匹配字符串的开始$:匹配字符串的结束匹配有abc开头的字符串:abc或者^abc匹配8位数字的QQ号码:^dddddddd$匹配1开头11位数字的手机号码...原创 2019-10-28 11:18:56 · 67038 阅读 · 27 评论 -
初识Redis—常用命令操作
Redis能做什么?Redis是一种缓存型数据库,数据完全存储在内存中,存取速度非常快,qps据说可以达到10w/s。原创 2019-04-09 23:12:20 · 964 阅读 · 0 评论 -
如何利用Keepalived实现LVS负载均衡
一、LVS简介负载均衡的方案有很多,适合RabbitMQ使用的处理HAProxy之外还有LVS。LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,在Linux2.6.32内核以前,使用LVS时必须要重新编译内...原创 2019-08-16 12:01:41 · 383 阅读 · 0 评论 -
HAProxy实现RabbitMQ负载均衡
一、HAProxy简介(1)HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架...原创 2019-08-16 15:14:47 · 2732 阅读 · 0 评论 -
Linux系统设置VIP(虚拟IP)的两种方式
一、命令行手动设置1、首先查看一下现有网卡的IP地址,用root特权运行下面的命令。ip addr2、执行命令ifconfig eth0:0 166.111.69.100 netmask 255.255.255.0 up3、执行ip addr查看是否生效ip addr4、ping查看是否联通ping 166.111.69.100二、keepalive...原创 2019-08-12 22:11:52 · 8123 阅读 · 0 评论 -
利用Keepalived实现集群的高可用(HA)
一、Keepalived简介Keepalived工具,它能够通过自身健康检查、资源接管功能做高可用(双机热备),实现故障转移。Keepalived采用VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议),以软件的形式实现服务器热备功能。通常情况下是将两台Linux服务器组成一个热备组(Master和Backup),同一时间热备组内只有一台主服务...原创 2019-08-12 23:55:02 · 685 阅读 · 0 评论 -
LVS实现负载均衡
一、LVS1、LVS是什么? LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分...原创 2019-08-17 21:59:59 · 1208 阅读 · 3 评论 -
互联网公司通用缓存架构
多级缓存的分层架构 在互联网高速发展的今天,缓存技术被广泛地应用。无论业内还是业外,只要是提到性能问题,大家都会脱口而出“用缓存解决”。这种说法带有片面性,甚至是一知半解,但是作为专业人士的我们,需要对缓存有更深、更广的了解。缓存技术存在于应用场景的方方面面。从浏览器请求,到反向代理服...原创 2019-10-11 19:17:08 · 722 阅读 · 0 评论 -
混沌工程之阿里巴巴Chaosblade
混沌工程我们可以把混沌工程看作揭示分布式系统中未知的弱点而进行的实验。混沌工程师通过应用一些经验探索的原则,来学习观察系统是如何反应的。这就跟科学家做实验去学习物理定律一样,混沌工程师通过做实验去了解系统。混沌工程是在分布式系统上进行实验的学科, 目的是建立对系统抵御生产环境中失控条件的能力以及信心,最早由Netflix及相关团队提出。现在大部分的混沌工程项目都叫做 Monke...原创 2019-08-20 22:41:04 · 408 阅读 · 0 评论 -
Docker的正确打开方式
作者:董明鑫,雪球网运维开发架构师,曾就职百度,2014 年加入雪球,目前主要负责保障雪球稳定性、提升资源利用率及提高开发效率等方面。关注容器生态圈的技术发展。来自:51cto技术栈(ID:blog51cto)“雪球目前拥有一千多个容器,项目数量大概有一百多个,规模并不是很大。但是得益于容器技术,雪球部署的效率非常高,雪球的开发人员只有几十个,但是每个月的发布次数高达两千多次。...转载 2019-08-05 18:45:51 · 1264 阅读 · 0 评论 -
如何模拟将CPU、IO打满?
一、故障模拟本文是来讲解一下如何模拟将CPU、IO打满的。将CPU打满,原理很简单,跑一个CPU密集型的程序即可;将IO打满,原理也很简单,狂写不止即可。下面我们先来看一个打满CPU的脚本:#!/bin/bashcat<<EOF>/tmp/infiniteburn.sh#!/bin/bashwhiletrue;doopensslspeed...原创 2019-08-05 08:10:28 · 5543 阅读 · 3 评论 -
Redis高级数据结构GEO用法
需求怎么实现一个“附件的人”或者附近的“商店”功能?需求分析可以基于数据库去做,给定一个坐标,以这个坐标为半径r, j使用sql选出近似圆的的元素进行展示。select id from positions where x > x0-r and x < x0+r and y < y0+r and y> y0-r但是如果访问量非常大,那数据库就无能为力,幸好Redi...原创 2019-04-22 13:21:31 · 1667 阅读 · 0 评论 -
【开发环境搭建二】IntelliJ IDEA 之 配置JDK 的 4种方式
Intelli IDEA 配置Java的4中方式原创 2019-04-29 09:30:24 · 568 阅读 · 0 评论 -
Redis如何实现消息队列
Redis 利用 其 专有的数据结构list可以实现简单的消息队列和异步发送的需求,当然可专业的mq相比,在消息投递的可靠性和及时性上还是有差距,如果对异步发送要求比较高,则建议还是采用专业的mq中间件。原创 2019-04-14 12:55:21 · 5577 阅读 · 1 评论 -
Redis开发规范(基于阿里云Redis开发规范)
Redis键值规范1、键设计易识别和管理遵从 业务名称:子业务名称:应用场景:自定义部分例如:key = “aliyun:forum:cache:comments:64529021”;2、简洁性在保证语义的前提下,控制key的长度,在大数据量场景下,key的内存占用不可小视。3、不要包含特殊字符包含空格、换行、单双引号以及其他转义字符4、控制bigvalue, 防止网卡流量、慢查询...原创 2019-04-10 09:43:27 · 686 阅读 · 0 评论 -
Redis如何实现布隆过滤器
本文将介绍Redis的数据结构HyperLogLog以及如何实现布隆过滤器。原创 2019-04-18 10:11:07 · 5951 阅读 · 0 评论 -
悲观锁、乐观锁的区别和实现
通过阅读本篇文章,将为您解决以下四个疑问。1、何为乐观锁?2、何为悲观锁?3、乐观锁如何实现?4、悲观锁如何实现?乐观锁乐观锁的实现悲观锁悲观锁的实现...原创 2019-04-13 17:33:53 · 2271 阅读 · 0 评论 -
一文读懂PHP最新加载规范PSR-4
FIG制定的PHP规范,简称PSR,是PHP开发的事实标准。PSR原本有四个规范,分别是:PSR-0 自动加载PSR-1 基本代码规范PSR-2 代码样式PSR-3 日志接口2013年底,新出了第5个规范——PSR-4。 PSR-4规范了如何指定文件路径从而自动加载类定义,同时规范了自动加载文件的位置。这个乍一看和PSR-0重复了,实际上,在功能上确实有所重复。区别在于...原创 2019-04-11 23:29:13 · 5424 阅读 · 0 评论 -
Redis实现分布式锁的正确姿势
在服务端的开发中,经常会遇到并发问题,并发问题大家能想到的就是并行变串行,锁就是一种并行变串行的方式,redis就可以利用其单线程的特性实现分布式锁。原创 2019-04-12 13:34:51 · 289 阅读 · 0 评论 -
cookie和session的区别
客户第一次发送请求给服务器,此时服务器产生一个唯一的sessionID,并返回给客户端(通过cookie),此时的cookie并没有setMaxAge();只是保存于客户端的内存中,并与一个浏览器窗口对应着,由于HTTP协议的特性,这一次连接就断开了 以后此客户端再发送请求给服务器的时候,就会在请求request中携带cookie,由于cookie中有sessionID,所以服务器就知道原创 2016-12-17 22:08:08 · 483 阅读 · 0 评论 -
数据结构bitmap的原理和应用
一、缓存二、MQ三、前端四、系统架构六、数据库一个可供参考的订单系统分库分表实践七、优化八、Linux相关九、综合架构师之路2016精选文章50篇架构师之路微信号主页原创 2017-03-31 10:12:47 · 694 阅读 · 0 评论 -
Redis高级数据结构HyperLogLog原理详解和应用场景
本文将介绍Redis的数据结构HyperLogLog原理和应用场景。Redis高级数据结构HyperLogLogHyperLogLog类似set的使用方法,可以接受元素添加,并给出key包含的唯一元素的近似数量。为什么说是近似数量,这和其实现有关系,先看完api再看实现原理和应用场景。> PFADD key element [element … //将任意数量的元素添加到指定的 Hy...原创 2019-04-17 20:49:13 · 3974 阅读 · 0 评论 -
【 全干货 】5 分钟带你看懂 Docker !
导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成、自动交付、自动部署,并且实现开发环境、测试环境、运维环境三方环境的真正同步。本文从Docker定义,作用,技术架构,安装和使用等全方位带你看懂Docker。Docker是啥?打开翻译君输入Docker 结果显示码头工人,没错!码头工人搬运的是集装箱,那么今天要讲的Docker其操作的也是集装箱,这个集装箱就静...转载 2019-08-03 09:28:57 · 692 阅读 · 0 评论 -
漫画 | Kubernetes带你一帆风顺去远航
这是一套漫画,介绍了Kubernetes以及如何使用它进行持续集成和持续交付。译者注:伊阿宋(英:Jason,另译:杰森),古希腊神话人物。原文链接:https://cloud.g...原创 2019-08-02 22:16:00 · 308 阅读 · 0 评论 -
漫画:容器技术docker是什么?
小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了。话说小史已经接受了A厂的offer,这不,已经在公司附近租好了房子,准备搬家过去住了。家里的东西真是多呀,小史的很多家具都是组装起来的,现在都已经拆散放到吕老师的车上了。就这样,吕老师开车带着小史一起去了公司附近的新住址。开了一个多小时,终于到了...原创 2019-08-02 21:47:00 · 1010 阅读 · 0 评论 -
【开发环境搭建一】Intellij IDEA构建SpringBoot项目
一、点击create New Project, 界面点击Spring Initializr, 默认配置,点击next二、填写Group和Artifact, 点击next三、选择web,点击next四、填写项目名称,点击next五、删除项目无用的配置,建立测试类六、点击启动启动信息,表明请求成功七、验证网址...原创 2019-04-28 23:07:53 · 433 阅读 · 0 评论 -
Java并发编程-对象共享
本文将介绍Java并发编程中的对象共享问题和解决办法。java并发访问共享数据的三种方式:1、synchronized 对共享变量进行变更的方法、代码块 使用synchronized关键字(或者Lock)。2、对共享变量使用volatile关键字。3、使用Atomic包中的原子性操作类。...原创 2019-04-27 17:23:47 · 633 阅读 · 0 评论