- 博客(34)
- 资源 (9)
- 收藏
- 关注
原创 如何实施异构服务器的负载均衡及过载保护?
后端的service有可能部署在硬件条件不同的服务器上:1)如果对标最低配的服务器“均匀”分摊负载,高配的服务器的利用率不足;2)如果对标最高配的服务器“均匀”分摊负载,低配的服务器可能会扛不住;能否根据异构服务器的处理能力来动态、自适应进行负载均衡及过载保护,是本文要讨论的问题。一、service层的负载均衡通常是怎么做的“一分钟了解负载均衡”中提到,service层...
2017-10-30 22:48:15 269
原创 lvs为何不能完全替代DNS轮询
上一篇文章“一分钟了解负载均衡的一切”引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点:1)nginx前端加入lvs和keepalived可以替代“DNS轮询”2)F5能搞定接入层高可用、扩展性、负载均衡,可以替代“DNS轮询”“DNS轮询”究竟是不是过时的技术,是不是可以被其他方案替代,接入层架构技术演进,是本文将要细致讨论的内容。...
2017-10-30 22:01:37 402
原创 一分钟了解负载均衡的一切
什么是负载均衡负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。常见的负载均衡方案常见互联网分布式架构如上,分为客户端层、反向代理nginx层、站点层、服务层、数据层。可以看到,每一个下游都有多个上游调用,只需要做到,每一个上游都均匀访问每一个下游,就能实现“将请求...
2017-10-30 18:55:31 451
原创 一分钟了解四层/七层反向代理
什么是四层反向代理hash 什么是七层反向代理hash 中间还有三层那里去了 ... 今天花几分钟简单和大家解释一下。场景:访问用户通过proxy请求被访问的真实服务器路径:用户 ->proxy-> real-server什么是代理?回答:[proxy]代表[访问用户],此时proxy是...
2017-10-30 18:45:22 4275
原创 究竟啥才是互联网架构“高并发”
一、什么是高并发高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。响应时间:系统对请求做出响应的时间。例如系统处理一...
2017-10-30 08:13:04 296
原创 究竟啥才是互联网架构“高可用”
一、什么是高可用高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8....
2017-10-29 21:23:18 301
原创 58到家MQ如何快速实现流量削峰填谷
问:站点与服务,服务与服务上下游之间,一般如何通讯?答:有两种常见的方式一种是“直接调用”,通过RPC框架,上游直接调用下游。在某些业务场景之下(具体哪些业务场景,见《到底什么时候该使用MQ?》),可以采用“MQ推送”,上游将消息发给MQ,MQ将消息推送给下游。问:为什么会有流量冲击?答:不管采用“直接调用”还是“MQ推送”,都有一个缺点,下游消息接收方无法...
2017-10-29 20:58:44 1526 1
原创 消息总线能否实现消息必达?
一、缘起任务、延迟消息都放在内存里,万一重启了怎么办?能否保证消息必达?今天就简单聊聊消息队列(MsgQueue)的消息必达性架构与流程。二、架构方向MQ要想尽量消息必达,架构上有两个核心设计点:(1)消息落地(2)消息超时、重传、确认三、MQ核心架构上图是一个MQ的核心架构图,基本可以分为三大块:(1)发送方->左侧粉色部分...
2017-10-29 20:42:31 807
原创 消息总线真的能保证幂等
一、缘起如《消息总线消息必达》所述,MQ消息必达,架构上有两个核心设计点:(1)消息落地(2)消息超时、重传、确认再次回顾消息总线核心架构,它由发送端、服务端、固化存储、接收端四大部分组成。为保证消息的可达性,超时、重传、确认机制可能导致消息总线、或者业务方收到重复的消息,从而对业务产生影响。举个栗子:购买会员卡,上游支付系统负责给用户扣款,下游系...
2017-10-27 14:54:06 261
原创 1分钟实现“延迟消息”功能
一、缘起很多时候,业务有“在一段时间之后,完成一个工作任务”的需求。例如:滴滴打车订单完成后,如果用户一直不评价,48小时后会将自动评价为5星。一般来说怎么实现这类“48小时后自动评价为5星”需求呢?常见方案:启动一个cron定时任务,每小时跑一次,将完成时间超过48小时的订单取出,置为5星,并把评价状态置为已评价。假设订单表的结构为:t_order(oid,...
2017-10-27 07:54:42 1097
原创 10w定时任务,如何高效触发超时
一、缘起很多时候,业务有定时任务或者定时超时的需求,当任务量很大时,可能需要维护大量的timer,或者进行低效的扫描。例如:58到家APP实时消息通道系统,对每个用户会维护一个APP到服务器的TCP连接,用来实时收发消息,对这个TCP连接,有这样一个需求:“如果连续30s没有请求包(例如登录,消息,keepalive包),服务端就要将这个用户的状态置为离线”。其中,单机TC...
2017-10-27 07:43:44 289
原创 到底什么时候该使用MQ
一、缘起一切脱离业务的架构设计与新技术引入都是耍流氓。引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问题(详见《互联网架构为什么要做微服务?》)。最近分享了几篇MQ相关的文章:《MQ如何实现延时消息》《MQ如何实现消息必达》《MQ如何实现幂等性》不少网友询问...
2017-10-26 22:01:50 373
原创 一分钟了解索引技巧
花1分钟时间,了解聚集索引,非聚集索引,联合索引,索引覆盖。举例,业务场景,用户表,表结构为:t_user(uid primary key,login_name unique,passwd,login_time,age,…);聚集索引(clustered index):聚集索引决定数据在磁盘上的物理排序,一个表只能有一个聚集索引,一般用prima...
2017-10-26 21:05:05 423
原创 多key业务,数据库水平切分架构一次搞定
数据库水平切分是一个很有意思的话题,不同业务类型,数据库水平切分的方法不同。本篇将以“订单中心”为例,介绍“多key”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。一、什么是“多key”类业务所谓的“多key”,是指一条元数据中,有多个属性上存在前台在线查询需求。订单中心业务分析订单中心是一个非常常见的“多key”业务,主要提...
2017-10-26 18:55:50 314
原创 多对多业务,数据库水平切分架构一次搞定
本文将以“好友中心”为例,介绍“多对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践。一、什么是多对多关系所谓的“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的关联关系,一个学生可以选修多个课程,一个课程可以被多个学生选修,这里学生与课程时间的关系,就是多对多关系。二、好友中心业务分析好友关系主要分为两类,弱好友...
2017-10-26 18:36:41 518
原创 1对多业务,数据库水平切分架构一次搞定
本文将以“帖子中心”为例,介绍“1对多”类业务,随着数据量的逐步增大,数据库性能显著降低,数据库水平切分相关的架构实践: 如何来实施水平切分 水平切分后常见的问题 典型问题的优化思路及实践 一、什么是1对多关系所谓的“1对1”,“1对多”,“多对多”,来自数据库设计中的“实体-关系”ER模型,用来描述实体之间的映射关系。1对1 一个用户只有一...
2017-10-25 18:56:57 526
原创 MySQL的or/in/union与索引优化
假设订单业务表结构为:order(oid, date, uid, status, money, time, …)其中: oid,订单ID,主键 date,下单日期,有普通索引,管理后台经常按照date查询 uid,用户ID,有普通索引,用户查询自己订单 status,订单状态,有普通索引,管理后台经常按照status查询 money/time,...
2017-10-25 18:15:25 329
原创 MySQL冗余数据的三种方案
一,为什么要冗余数据互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非patition key上的查询可能就需要扫描多个库了。此时常见的架构设计方案,是使用数据冗余这种反范式设计来满足分库后不同维度的查询需求。例如:订单业务,对用户和商家都有订...
2017-10-25 08:05:26 2253
原创 MySQL双主一致性架构优化
一、双主保证高可用MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点。在一个MySQL数据库集群中可以设置两个主库,并设置双向同步,以冗余写库的方式来保证写库的高可用。二、并发引发不一致数据冗余会引发数据的一致性问题,因为数据的同步有一个时间差,并发的写入可能导致数据同步失败,引起数据丢失:如...
2017-10-25 07:52:18 740
原创 或许你不知道的10条SQL技巧
这几天在写索引,想到一些有意思的TIPS,希望大家有收获。一、一些常见的SQL实践(1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好习惯可以优化为in查询: select * from order where statusin(2,3...
2017-10-24 22:28:47 183
原创 分层架构,是否需要业务服务层
《互联网分层架构的本质》简述了两个观点: 互联网分层架构的本质,是数据的移动 互联网分层架构演进的核心原则:是让上游更高效的获取与处理数据,让下游能屏蔽数据的获取细节 《分层架构:什么时候抽象DAO层,什么时候抽象数据服务层》中的观点是: 当手写代码从DB中获取数据,成为通用痛点的时候,就应该抽象出DAO层,简化数据获取过程,提高数据获取效率,向上游屏蔽底层的复杂性...
2017-10-24 22:13:31 1407
原创 互联网分层架构之-DAO与服务化
互联网分层架构的本质,是数据的移动。互联网分层架构演进的核心原则: 让上游更高效的获取与处理数据,复用 让下游能屏蔽数据的获取细节,封装 这些在上一篇《互联网分层架构的本质》中有详尽的描述,在实际系统架构演进过程中,如何利用这两个原则,对系统逐步进行分层抽象呢?咱们先从后端系统开始讲解。本文主要解答两个问题: 后端架构,什么时候进行DAO层的抽象...
2017-10-24 21:29:58 561
原创 互联网分层架构的本质
上图是一个典型的互联网分层架构: 客户端层:典型调用方是browser或者APP 站点应用层:实现核心业务逻辑,从下游获取数据,对上游返回html或者json 数据-缓存层:加速访问存储 数据-数据库层:固化数据存储 如果实施了服务化,这个分层架构图可能是这样:中间多了一个服务层。同一个层次的内部,例如端上的APP,以...
2017-10-24 08:03:37 314
原创 线上服务内存OOM问题定位三板斧
相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的原因: 本身资源不够 申请的太多 资源耗尽 58到家架构部,运维部,58速运技术部联合进行了一次线上服务内存OOM问题排查实战演练,将内存OOM问题定位三板斧分享出来,希望对大家也有帮助。题目某服务器上部署了Java服务一枚,出现了OutOfMemoryError,...
2017-10-23 22:39:15 995
原创 线上服务CPU100%问题快速定位实战
功能问题,通过日志,单步调试相对比较好定位。性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。58到家架构部,运维部,58速运技术部联合进行了一次线上服务CPU问题排查实战演练,同学们反馈有收获,特将实战演练的试题和答案公布出来,希望对大家也有帮助。题目某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点...
2017-10-23 22:20:59 322
原创 linux下追查线上问题常用命令
inux下追查线上问题常用命令(1)查占用cpu最多的进程方法一:核心指令:ps实际命令:ps H -eo pid,pcpu | sort -nk2 | tail执行效果如下:[work@test01 ~]$ ps H -eo pid,pcpu | sort -nk2 | tail31396 0.631396 0.631396 0.631396 0...
2017-10-23 22:16:25 230
原创 一分钟学awk够用
1.什么是AWK(1)Aho、Weinberger、Kernighan三位发明者名字首字母;(2)一个行文本处理工具;2.AWK基本原理2.1原理:逐行处理文件中的数据2.2语法: awk 'pattern + {action}' 说明:(1)单引号''是为了和shell命令区分开;(2)大括号{}表示一个命令分组;(3)pattern是一...
2017-10-23 22:15:32 316
原创 一分钟sed入门
1.简介sed是一种行编辑器,它一次处理一行内容。2.sed调用方式sed [options] 'command' file(s)sed [options] -f scriptfile file(s)第一种直接在命令行中执行,第二种把命令写到了脚本中,二者无本质区别。示例(1):打印hello.txt的内容sed -n p hello.txt说明:-n...
2017-10-23 22:14:39 488
原创 线上操作与线上问题排查实战
技术同学需要经常登录线上的服务器进行操作,58到家架构部/运维部/58速运技术部,联合进行了一次线上操作与线上问题排查实战演练,同学们反馈有收获,特将实战演练的问题和答案公布出来,希望对大家也有帮助。一、了解机器连接数情况问题:1.2.3.4的sshd的监听端口是22,如何统计1.2.3.4的sshd服务各种连接状态(TIME_WAIT/ CLOSE_WAIT/ ESTABLI...
2017-10-23 21:27:10 1033
原创 URI设计原则
咱们设计的REST API真的nice么?优雅型:http://api.exapmle.com/louvre/da-vinci/mona-lisa卢浮宫/达芬奇/蒙娜丽莎中庸型:http://58.com/bj/ershou/310976北京/二手频道/帖子ID谢特型:http://api.example.com/68dd0-a9d3-11e0-9f1c不知道什么鬼...
2017-10-23 20:53:38 1130
原创 速运“里程计算”优化与演进
58速运货物运输,滴滴快递网约车,司机端都是按照行驶公里数收费的,所以“里程”的准确性,是这类业务的一个核心难题,“里程计算”方案演进,以及其中优化思想,是本文要讨论的问题一、直接调用地图API这是最容易想到的方法,最省事,但司机往往不是按照预定的路线行驶的,很有可能因为堵车、道路封闭等改变路线,所以直接调用地图API,一次性计算出一个预估值,不太靠谱优化方案:根据实际路线...
2017-10-22 22:32:15 1341
原创 谈消息安全传输中的技术点
和女/男票聊了一些私密的话,成天担心消息会不会被泄漏,始终不放心,看完此文,消息传输安全性的来龙去脉,终于略知一二了。一、初级阶段:信息裸传特点:在网络上传递明文黑客定理一:网络上传递的数据是不安全的,属网络于黑客公共场所,能被截取结果:传递明文无异于不穿衣服裸奔改进方案:先加密,再在网络上传输二、进阶阶段:传输密文特点: 服...
2017-10-22 22:01:35 570
原创 工作线程数究竟要设置为多少
一、需求缘起Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。“工作线程数”的设置依据是什么,到底设置为多少能够最大化CPU性能,是本文要讨论的问题。二、共性认知在进行进一步深入讨...
2017-10-22 21:22:44 709
原创 分布式ID生成器
一、需求缘起几乎所有的业务系统,都有生成一个唯一记录标识的需求,例如: 消息标识:message-id 订单标识:order-id 帖子标识:tiezi-id 这个记录标识往往就是数据库中的主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求,例如: 拉...
2017-10-22 20:46:26 242
阿里巴巴9年双11
2018-01-23
阿里巴巴2016双11背后的技术
2018-01-19
Java数据结构概述图表
2017-02-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人