- 博客(125)
- 资源 (4)
- 收藏
- 关注
原创 饿了么多活利器:实时双向复制工具(DRC)
DRC介绍饿了么的 Data Replicate Center(DRC)项目用于数据双向复制和数据订阅,使用场景如下图:要点说明: 跨机房的 Mysql 数据复制完全通过 DRC 来完成 还有很多业务团队通过 DRC 来实现数据订阅 目前饿了么100%的跨机房数据复制,90%的数据订阅都通过DRC完成,每天有大量的数据流经DRC。复制延迟保持在1s以下,从来没有发生...
2019-01-08 00:32:56 1735
原创 JVM调优总结
目录数据类型堆与栈Java对象的大小引用类型按照基本回收策略分按分区对待的方式分按系统线程分如何区分垃圾如何处理碎片如何解决同时存在的对象创建和对象回收问题为什么要分代如何分代什么情况下触发垃圾回收分代垃圾回收流程示意选择合适的垃圾收集算法小结回收器选择辅助信息常见配置汇总调优总结垃圾回收的瓶颈增量收集的演进Garbage Firest(G1)展望JVM调优工具如何调优线程监控内存泄漏检查垃圾...
2018-11-23 16:52:07 706
原创 饿了么异地双活数据库实战
本文根据 GOPS2017·上海站演讲《饿了么异地双活数据库实战》整理发布作者简介:虢国飞,饿了么 DBA负责人从事数据库行业10+年,专注于MySQL、PgSQL、MSSQL等数据库领域的管理、研究和平台的研发等工作,目前负责饿了么数据库团队的管理和数据库维护方面的工作。我今天分享是饿了么在数据库和多活数据库这块的实战经历,供大家参考。主要分享以下五点:1、多活当中的难点...
2018-11-22 20:47:15 1267 2
原创 饿了么异地多活实现思路
饿了么技术团队花了1年多的时间,实现了业务的整体异地多活,能够灵活的在多个异地机房之间调度用户,实现了自由扩容和多机房容灾的目标。本文介绍这个项目的整体结构,还简要介绍实现多活的5大核心基础组件,为读者建立基本的概念模型,后续会有系列文章陆续介绍每个组件的实现细节。读者能够从中了解到做异地多活的大方向,为实现自己的异地多活,或者是容灾备份提供参考。背景:为什么要做异地多活?饿了么要做多活,...
2018-11-22 20:21:58 1312
原创 饿了么多活高可用思想
饿了么业务快速发展,给技术带来了海量请求和高并发、微服务的挑战,同时开发团队快节奏的版本迭代和服务快速上线的要求也驱动运维团队提供稳定、高效的运维服务。2017 年 12 月 01 日-02 日,由 51CTO 主办的 WOTD 全球软件开发技术峰会在深圳中州万豪酒店隆重举行。饿了么技术运营负责人程炎岭在创新运维探索专场与来宾分享了"跨越篱笆-饿了么多活运维上下求索"的主题演讲,从业务...
2018-11-22 20:08:42 983
原创 Mac运行Windows上的应用程序-以PowerDesigner为例
随着时代的变化,现在的很多后端开发都开始使用Mac作为第一生产工具。但是这就出现了一个很尴尬的问题,以前我们习惯用的Windows上很多的软件都没有Mac版本。要么我们为了用这些软件而使用两台电脑或者装双系统、要么只能勉强使用Mac版的工具。所以本篇博客主要解决的就是这个痛点,无需安装双系统。很快很简单的就能实现在Mac上执行EXE文件。首先,我们要下载Wineskin Winery软件。具体...
2018-11-16 15:08:31 3201
原创 Mac OS 终端利器 iTerm2
之前一直使用 Mac OS 自带的终端,用起来虽然有些不太方便,但总体来说还是可以接受的,是有想换个终端的想法,然后今天偶然看到一个终端利器 iTerm2,发现真的很强大,也非常的好用,按照网上配置了主题什么的,还是有些坑的,这边再记录下,以便后面查阅。1. 安装 iTerm2下载地址:https://www.iterm2.com/downloads.html下载的是压缩文件...
2018-11-14 14:30:58 1674
原创 JAVA内存模型详解
前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的一个,而且涉及到很多背景知识和相关知识。网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚...
2018-11-08 20:48:12 307
原创 深入理解Java中的volatile关键字
在Java内存模型详解中我们曾经介绍过,Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在前一篇文章中,我们也介绍了synchronized的用法及原理。本文,来分析一下另外一个关键字——volatile。本文就围绕volatile展开,主要介绍volatil...
2018-10-11 11:01:49 659
原创 编程字典-PHP学习线路图
PHP教程PHP教程 PHP简介 PHP环境设置 PHP语法概述 PHP变量类型 PHP常量类型 PHP运算符类型 PHP 条件语句 PHP循环语句 PHP数组 PHP字符串操作 PHP Web概念 PHP的GET和POST方法 PHP 文件包含 PHP文件和I _ O PHP函数 PHP Cookie...
2018-10-09 16:35:55 7121
原创 Chrome自带恐龙小游戏的源码研究(一)
目录Chrome自带恐龙小游戏的源码研究(一)——绘制地面Chrome自带恐龙小游戏的源码研究(二)——绘制云朵Chrome自带恐龙小游戏的源码研究(三)——昼夜交替Chrome自带恐龙小游戏的源码研究(四)——绘制障碍物Chrome自带恐龙小游戏的源码研究(五)——绘制霸王龙Chrome自带恐龙小游戏的源码研究(六)——跳跃Chrome自带恐龙小游戏的源码研...
2018-09-12 11:29:16 17241 3
原创 EXPLAIN 命令详解
在工作中,我们用于捕捉性能问题最常用的就是打开慢查询,定位执行效率差的SQL,那么当我们定位到一个SQL以后还不算完事,我们还需要知道该SQL的执行计划,比如是全表扫描,还是索引扫描,这些都需要通过EXPLAIN去完成。EXPLAIN命令是查看优化器如何决定执行查询的主要方法。可以帮助我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时...
2018-09-07 17:48:12 358
原创 Mysql Find_IN_SET函数
今天在做项目时,看到了一个从没见过的MySQL函数——FIND_IN_SET(),顿时就产生了浓郁的兴趣,然后就搜了搜,翻了翻。语法:FIND_IN_SET(str,strlist)定义:1. 假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在1到N之间。2. 一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。3. 如果第一个参数是一个常...
2018-09-07 17:44:44 457
原创 一个很好的php分词类库-SCWS
一位网友推荐了SCWS分词系统,看着挺不错,在这里记一下。 最近做实验,苦于php分词的问题,从网上找了很多,但都不行,导致试验结果不是很好,今天早晨抱着不放弃的努力,又试着重网上找开源的php分词词库,终于功夫不负有心人。发现了一个很好的分词类库phpanalysis2.0。 原文连接地址:http://www.phpbone.com/phpana...
2018-09-06 17:39:55 856
原创 Navicat Premium Mac 12 破解
经博主亲测,非常好用。给大家分享。穷人利器啊~~~去百度上各种搜索,发现了很多不靠谱的下载地址,真是坑B,坑死我了,经过一遍一遍的尝试,终于找到了破解方法!!!!!首先先声明一下,我特别痛恨那种骗人的网站,还口口声声说什么已破解。我要的是最新版,他标题是最新版,实际上却是老版本,反正各种骗人。特别是一些网站还要充钱才能下软件,我充nmlgb 第一步:这部分暂时存到文本编辑器中公...
2018-09-04 16:54:22 21489 41
原创 4种事务的隔离级别,InnoDB如何巧妙实现?
事务ACID特性,其中I代表隔离性(Isolation)。 什么是事务的隔离性?隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。 一个事务怎么会干扰其他事务呢?咱们举例子来说明,假设有InnoDB表:t(id PK, name); 表中有三条记录:1, shenjian2, zhan...
2018-08-30 18:49:00 347
原创 缓存架构,一篇足够?
缓存是互联网系统架构中必不可少的一环,近一个月,写了一些缓存的文字。1.《进程内缓存究竟怎么玩?》缓存,可以分为:进程内缓存,缓存集群。文章介绍了:(1)什么是进程内缓存(2)进程内缓存的优缺点(3)进程内缓存保存一致性的3种方案(4)到底什么时候用进程内缓存文章也说明,大部分情况下,应该用缓存服务。如今最常见的缓存服务是redis和memcache,遂引出了第二篇文章。2.《到底选r...
2018-08-29 17:37:23 446
原创 选redis还是memcache,源码怎么说?
memcache和redis是互联网分层架构中,最常用的KV缓存。不少同学在选型的时候会纠结,到底是选择memcache还是redis。画外音:不鼓励粗暴的实践,例如“memcache提供的功能是redis提供的功能的子集,不用想太多,选redis准没错”。 虽然redis比memcache更晚出来,且功能确实也更丰富,但对于一个技术人,了解“所以然”恐怕比“选择谁”更重要一些。 ...
2018-08-29 17:22:12 638
原创 MySql表、索引设计参考规范
一、基础规范 表存储引擎必须使用InnoDB 表字符集默认使用utf8,必要时候使用utf8mb4 解读:(1)通用,无乱码风险,汉字3字节,英文1字节(2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它 禁止使用存储过程,视图,触发器,Event 解读:(1)对数据库性能影响较大,互联网业务,能让站点层和服务层干的事情,不要...
2018-08-29 16:27:15 4184
原创 InnoDB,5项最佳实践,知其所以然?
第一篇,说说MySQL两个最常用的存储引擎,MyISAM和InnoDB。照自己的理解,把一些知识点总结出来,不只说知识点,多讲“为什么”。一、关于count(*)知识点:MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。 潜台词是,对于select count(*) from t; 如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。 实践:数据量大的...
2018-08-29 16:11:37 264
原创 1分钟了解MyISAM与InnoDB的索引差异
《数据库索引,到底是什么做的?》介绍了B+树,它是一种非常适合用来做数据库索引的数据结构:(1)很适合磁盘存储,能够充分利用局部性原理,磁盘预读;(2)很低的树高度,能够存储大量数据;(3)索引本身占用的内存很小;(4)能够很好的支持单点查询,范围查询,有序性查询; 数据库的索引分为主键索引(Primary Inkex)与普通索引(Secondary Index)。Inno...
2018-08-29 11:03:33 1141
原创 数据库索引,到底是什么做的?
近期写数据库,不少朋友留言问MySQL索引底层的实现,今天简单聊一聊,少讲“是怎么样”,更多说说“为什么设计成这样”。 问题1. 数据库为什么要设计索引? 图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去?于是,图书管理员设计了一套规则:(1)一楼放历史类,二楼放文学类,三楼放IT类…(2)IT类,又分软件类,硬件类…(3)软件类,又...
2018-08-29 10:40:13 1120
原创 如何解决高并发,秒杀问题
相信不少人会被这个问题困扰,分享大家一篇这样的文章,希望能够帮到你! 一、秒杀业务为什么难做?1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的...
2018-08-28 19:16:59 12365
原创 zookeeper的应用和原理
场景一有这样一个场景:系统中有大约100w的用户,每个用户平 均有3个邮箱账号,每隔5分钟,每个邮箱账需要收取100封邮件,最多3亿份邮件需要下载到服务器中(不含附件和正文)。用20台机器划分计算的压力,从 多个不同的网路出口进行访问外网,计算的压力得到缓解,那么每台机器的计算压力也不会很大了。 通过我们的讨论和以往的经验判断在这场景中可以实现并行计算,但我们还期望能对并行计...
2018-08-28 18:56:03 292
原创 MySQL 5.7新特性:并行复制原理(MTS)
众所周知,MySQL的复制延迟是一直被诟病的问题之一,在MySQL 5.7版本已经支持“真正”的并行复制功能,官方称为为enhanced multi-threaded slave(简称MTS),因此复制延迟问题已经得到了极大的改进。总之,MySQL 5.7版本后,复制延迟问题永不存在。一、MySQL 5.6并行复制架构从MySQL 5.6.3版本开始就支持所谓的并行复制了,但是其并行只是基...
2018-08-27 19:17:33 19541 5
原创 在PHP中怎么接收post过来的JSON数据(转)
要在PHP中整体接收POST数据,有两种方法。注意,要使用以下两种方法,Content-Type不能为multipart/form-data。方法一:使用: 1 file_get_contents('php://input') 其中,php://input是一个流,可以读取没有处理过的POST数据(即原始数据)。相较于$HTTP_RAW_PO...
2018-07-20 15:04:35 29428
原创 参数化查询为什么能够防止SQL注入
很多人都知道SQL注入,也知道SQL参数化查询可以防止SQL注入,可为什么能防止注入却并不是很多人都知道的。本文主要讲述的是这个问题,也许你在部分文章中看到过这块内容,当然了看看也无妨。 首先:我们要了解SQL收到一个指令后所做的事情:具体细节可以查看文章:Sql Server 编译、重编译与执行计划重用原理在这里,我简单的表示为: 收到指令 -> 编译SQL生成执行计划...
2018-07-19 16:13:19 6489
原创 通过UDF使mysql主动刷新redis缓存
DF是mysql的一个拓展接口,UDF(Userdefined function)用户自定义函数。在什么地方使用这个功能呢,试想有如下场景:你的网站使用mysql作为最终数据落地的存储引擎,而redis作为缓存以减小查询请求穿透到mysql的数量,可以极大的降低数据库性能瓶颈带来的整个网站对外服务的卡顿、不可用等情况。这种方式的架构,当有查询请求的时候,我们可以在业务逻辑层控制,先从缓存中查询...
2018-07-19 15:37:01 361
原创 HTTP 头部信息详解
HTTP 头部解释 1. Accept:告诉WEB服务器自己接受什么介质类型,*/* 表示任何类型,type/* 表示该类型下的所有子类型,type/sub-type。 2. Accept-Charset: 浏览器申明自己接收的字符集 Accept-Encoding: 浏览器申明自己接收的编码方法,通常指定压缩方法,是否支持压缩,支持什么压缩方法 (gzip,deflate) A...
2018-07-19 15:13:49 435
原创 深入解析Mysql 主从同步延迟原理及解决方案
MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。相信大家对于这些好处已经非常了解了,在项目的部署中也采用这种方案。但是MySQL的主从同步一直有从库延迟的问题,那么为什么会有这种问题。这种问题如何解决呢?1. MySQL数据库主从同...
2018-07-16 11:46:44 449
原创 服务器常见错误代码500、501、502、503、504、505
一:500错误1、500 Internal Server Error 内部服务错误:顾名思义500错误一般是服务器遇到意外情况,而无法完成请求。2、500出错的可能性: a、编程语言语法错误,web脚本错误 b、并发高时,因为系统资源限制,而不能打开过多的文件3、一般解决思路: a、查看nginx、php的错误日志文件,从而看出端倪 b、如果是too many ...
2018-07-16 11:38:10 17047
原创 设计----【分库、分表】分库分表的基本思想
本文来自:http://www.cnblogs.com/sunny3096/p/8595783.html一、基本思想Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据...
2018-07-13 16:38:58 398
原创 五大常见的MySQL高可用方案
本文来自:https://zhuanlan.zhihu.com/p/259602081. 概述我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。当业务发生数据库切换时,切换前后的数...
2018-07-13 16:12:53 641
原创 MySQL高可用之MHA的搭建
MySQL MHA架构介绍:MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程...
2018-07-12 17:37:38 555
原创 MySQL锁机制及优化
MySQL锁定机制简介MySQL锁定机制简介前言MySQL锁定机制简介行级锁表级锁页级锁表级锁定读锁定写锁定行级锁定Innodb锁定模式及其实现机制Innodb与Mysql锁实现机制的区别Innodb事务隔离级别下的锁定及死锁Innodb锁定机制示例行锁定演示无索引升级为表锁定间隙锁带来的插入问题死锁示例合理利用锁机制优化MySqlMyISAM表锁优化建议Innodb行锁优化建议前言为了保证数据的...
2018-07-12 17:11:47 1834 1
原创 HTTP协议
HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。本文介绍 HTTP 协议的历史演变和设计思路。一、HTTP/0.9HTTP 是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口。最早版本是1991年发布的0.9版。该版本极其简单,只有一个命令GET。GET /i...
2018-07-12 16:02:48 246
原创 MySQL学习之——锁(行锁、表锁、页锁、乐观锁、悲观锁等)-转
锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具。在计算机中,是协调多个进程或县城并发访问某一资源的一种机制。在数据库当中,除了传统的计算资源(CPU、RAM、I/O等等)的争用之外,数据也是一种供许多用户共享访问的资源。如何保证数据并发访问的一致性、有效性,是所有数据库必须解决的一个问题,锁的冲突也是影响数据库并发访问性能的一个重要因素。从这一角度来说,锁对于数据库而言就显得尤为重要。My...
2018-07-12 15:15:11 349 1
原创 高可用架构(转)
一、可用性度量与考核 首先,不得不说:要保证一个网站永远完全可用几乎是一件不可能完成的任务(Mission Impossible,是不是有点碟中谍的感觉)。 (1)如何度量网站可用性? 一个神奇的数字—9!你有几个9,就代表了你的可用性。例如QQ可用性达到了4个9:99.99% ①2个9=基本可用 ②3个9=较高可用 ③4个9=具有自动恢复能力的高可用 ④5个9=极高可用->...
2018-06-22 17:51:49 16884
原创 大网站架构
此处我说的HTTP服务主要指如访问京东网站时我们看到的热门搜索、用户登录、实时价格、实时库存、服务支持、广告语等这种非Web页面,而是在Web页面中异步加载的相关数据。这些服务有个特点即访问量巨大、逻辑比较单一;但是如实时库存逻辑其实是非常复杂的。在京东这些服务每天有几亿十几亿的访问量,比如实时库存服务曾经在没有任何IP限流、DDos防御的情况被刷到600多万/分钟的访问量,而且能轻松应对。支撑如...
2018-06-22 17:12:51 310
原创 电商网站商品详情架构
本章以京东商品详情页为例,京东商品详情页虽然仅是单个页面,但是其数据聚合源是非常多的,除了一些实时性要求比较高的如价格、库存、服务支持等通过AJAX异步加载加载之外,其他的数据都是在后端做数据聚合然后拼装网页模板的。http://item.jd.com/1217499.html 如图所示,商品页主要包括商品基本信息(基本信息、图片列表、颜色/尺码关系、扩展属性、规格参数、包装清单、售后保障等)、商...
2018-06-22 17:10:18 3305
纯PHP代码实现HTML与MarkDown互转
2018-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人