架构
文章平均质量分 89
HelloWorld搬运工
HelloWorld是学习程序的第一个程序,搬运工是将一件东西从一个地方运到另一个地方。HelloWorld搬运工,分享技术知识,有原创也有转发,彼此交流,一起学习,共同进步。
展开
-
究竟啥才是互联网架构“高可用”
一、什么是高可用高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时间为8....原创 2017-10-29 21:23:18 · 301 阅读 · 0 评论 -
究竟啥才是互联网架构“高并发”
一、什么是高并发高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。响应时间:系统对请求做出响应的时间。例如系统处理一...原创 2017-10-30 08:13:04 · 296 阅读 · 0 评论 -
计数系统架构实践一次搞定
一、需求缘起很多业务都有“计数”需求,以微博为例:微博首页的个人中心部分,有三个重要的计数: 关注了多少人的计数 粉丝的计数 发布博文的计数 微博首页的博文消息主体部分,也有有很多计数,分别是一条博文的: 转发计数 评论计数 点赞计数 甚至是浏览计数 在业务复杂,计数扩展频繁,数据量大,并发量大的情...原创 2017-11-07 21:33:19 · 446 阅读 · 0 评论 -
互联网架构,如何进行容量设计?
一,需求缘起互联网公司,这样的场景是否似曾相识:场景一:pm要做一个很大的运营活动,技术老大杀过来,问了两个问题:(1)机器能抗住么?(2)如果扛不住,需要加多少台机器?场景二:系统设计阶段,技术老大杀过来,又问了两个问题:(1)数据库需要分库么?(2)如果需要分库,需要分几个库?技术上来说,这些都是系统容量预估的问题,容量设计是架构师必备的技能之...原创 2017-11-07 22:14:35 · 421 阅读 · 0 评论 -
单点系统架构的可用性与性能优化
一、需求缘起明明架构要求高可用,为何系统中还会存在单点?回答:单点master的设计,会大大简化系统设计,何况有时候避免不了单点在哪些场景中会存在单点?先来看一下一个典型互联网高可用架构。典型互联网高可用架构:(1)客户端层,这一层是浏览器或者APP,第一步先访问DNS-server,由域名拿到nginx的外网IP(2)负载均衡层,nginx是整个服务端的入口,负责...原创 2017-11-08 08:13:10 · 662 阅读 · 0 评论 -
一分钟了解四层/七层反向代理
什么是四层反向代理hash 什么是七层反向代理hash 中间还有三层那里去了 ... 今天花几分钟简单和大家解释一下。场景:访问用户通过proxy请求被访问的真实服务器路径:用户 ->proxy-> real-server什么是代理?回答:[proxy]代表[访问用户],此时proxy是...原创 2017-10-30 18:45:22 · 4275 阅读 · 0 评论 -
一分钟了解负载均衡的一切
什么是负载均衡负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据【均匀】分摊到多个操作单元上执行,负载均衡的关键在于【均匀】。常见的负载均衡方案常见互联网分布式架构如上,分为客户端层、反向代理nginx层、站点层、服务层、数据层。可以看到,每一个下游都有多个上游调用,只需要做到,每一个上游都均匀访问每一个下游,就能实现“将请求...原创 2017-10-30 18:55:31 · 451 阅读 · 0 评论 -
lvs为何不能完全替代DNS轮询
上一篇文章“一分钟了解负载均衡的一切”引起了不少同学的关注,评论中大家争论的比较多的一个技术点是接入层负载均衡技术,部分同学持这样的观点:1)nginx前端加入lvs和keepalived可以替代“DNS轮询”2)F5能搞定接入层高可用、扩展性、负载均衡,可以替代“DNS轮询”“DNS轮询”究竟是不是过时的技术,是不是可以被其他方案替代,接入层架构技术演进,是本文将要细致讨论的内容。...原创 2017-10-30 22:01:37 · 402 阅读 · 0 评论 -
分布式ID生成器
一、需求缘起几乎所有的业务系统,都有生成一个唯一记录标识的需求,例如: 消息标识:message-id 订单标识:order-id 帖子标识:tiezi-id 这个记录标识往往就是数据库中的主键,数据库上会建立聚集索引(cluster index),即在物理存储上以这个字段排序。这个记录标识上的查询,往往又有分页或者排序的业务需求,例如: 拉...原创 2017-10-22 20:46:26 · 242 阅读 · 0 评论 -
工作线程数究竟要设置为多少
一、需求缘起Web-Server通常有个配置,最大工作线程数,后端服务一般也有个配置,工作线程池的线程数量,这个线程数的配置不同的业务架构师有不同的经验值,有些业务设置为CPU核数的2倍,有些业务设置为CPU核数的8倍,有些业务设置为CPU核数的32倍。“工作线程数”的设置依据是什么,到底设置为多少能够最大化CPU性能,是本文要讨论的问题。二、共性认知在进行进一步深入讨...原创 2017-10-22 21:22:44 · 709 阅读 · 0 评论 -
谈消息安全传输中的技术点
和女/男票聊了一些私密的话,成天担心消息会不会被泄漏,始终不放心,看完此文,消息传输安全性的来龙去脉,终于略知一二了。一、初级阶段:信息裸传特点:在网络上传递明文黑客定理一:网络上传递的数据是不安全的,属网络于黑客公共场所,能被截取结果:传递明文无异于不穿衣服裸奔改进方案:先加密,再在网络上传输二、进阶阶段:传输密文特点: 服...原创 2017-10-22 22:01:35 · 570 阅读 · 0 评论 -
速运“里程计算”优化与演进
58速运货物运输,滴滴快递网约车,司机端都是按照行驶公里数收费的,所以“里程”的准确性,是这类业务的一个核心难题,“里程计算”方案演进,以及其中优化思想,是本文要讨论的问题一、直接调用地图API这是最容易想到的方法,最省事,但司机往往不是按照预定的路线行驶的,很有可能因为堵车、道路封闭等改变路线,所以直接调用地图API,一次性计算出一个预估值,不太靠谱优化方案:根据实际路线...原创 2017-10-22 22:32:15 · 1341 阅读 · 0 评论 -
如何实施异构服务器的负载均衡及过载保护?
后端的service有可能部署在硬件条件不同的服务器上:1)如果对标最低配的服务器“均匀”分摊负载,高配的服务器的利用率不足;2)如果对标最高配的服务器“均匀”分摊负载,低配的服务器可能会扛不住;能否根据异构服务器的处理能力来动态、自适应进行负载均衡及过载保护,是本文要讨论的问题。一、service层的负载均衡通常是怎么做的“一分钟了解负载均衡”中提到,service层...原创 2017-10-30 22:48:15 · 269 阅读 · 0 评论 -
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 阅读 · 0 评论 -
一分钟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 阅读 · 0 评论 -
一分钟学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 阅读 · 0 评论 -
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 阅读 · 0 评论 -
线上服务CPU100%问题快速定位实战
功能问题,通过日志,单步调试相对比较好定位。性能问题,例如线上服务器CPU100%,如何找到相关服务,如何定位问题代码,更考验技术人的功底。58到家架构部,运维部,58速运技术部联合进行了一次线上服务CPU问题排查实战演练,同学们反馈有收获,特将实战演练的试题和答案公布出来,希望对大家也有帮助。题目某服务器上部署了若干tomcat实例,即若干垂直切分的Java站点...原创 2017-10-23 22:20:59 · 322 阅读 · 0 评论 -
百度咋做长文本去重
缘起:(1)原创不易,互联网抄袭成风,很多原创内容在网上被抄来抄去,改来改去(2)百度的网页库非常大,爬虫如何判断一个新网页是否与网页库中已有的网页重复呢?这是本文要讨论的问题(尽量用大家都能立刻明白的语言和示例表述)。一、传统签名算法与文本完整性判断问题抛出:(1)运维上线一个bin文件,将文件分发到4台线上机器上,如何判断bin文件全部是一致的?(2)用户A将...原创 2017-11-01 07:25:33 · 2160 阅读 · 0 评论 -
秒杀系统架构优化思路
一、秒杀业务为什么难做1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息);2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据;3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。又例如:12306抢票,票是有限的,库存一...原创 2017-11-01 08:09:14 · 594 阅读 · 0 评论 -
互联网架构为什么要做服务化?
一、互联网高可用架构,为什么要服务化?【服务化之前高可用架构】在服务化之前,互联网的高可用架构大致是这样一个架构:(1)用户端是浏览器browser,APP客户端(2)后端入口是高可用的nginx集群,用于做反向代理(3)中间核心是高可用的web-server集群,研发工程师主要编码工作就是在这一层(4)后端存储是高可用的db集群,数据存储在这一层更典型的,w...原创 2017-11-09 18:39:05 · 4711 阅读 · 5 评论 -
应用层/安全层/传输层如何进行协议选型
系统设计,协议先行。大部分技术人没有接触协议的设计细节,更多的是使用已有协议进行应用层的编码,例如:(1)使用http作为载体,设计get/post/cookie参数(2)使用dubbo框架,而不用去深究内部的二进制包头包体,以及序列号反序列化的细节无论如何,了解协议设计的原则,对深入理解系统通信非常有帮助。今天就以即时通讯(后称im)为例,讲讲应用层的协议选型。一...原创 2017-11-09 19:03:11 · 993 阅读 · 0 评论 -
一分钟实现分布式锁
一、缘起分布式环境下,多台机器上多个进程对一个数据进行操作,如果不做互斥,就有可能出现“余额扣成负数”,或者“商品超卖”的情况,如何实现简易分布式锁,对分布式环境下的临界资源做互斥,是今天将要讨论的话题。二、互斥原理原理:多个访问方对同一个资源进行操作,需要进行互斥,通常是利用一个这些访问方同时能够访问到的lock来实施互斥的。例子1:同一个进程内,多个线程的互斥,典型...原创 2017-11-10 07:43:33 · 455 阅读 · 0 评论 -
连接池原来这么简单
一、如何通过连接访问下游工程架构中有很多访问下游的需求,下游包括但不限于服务/数据库/缓存,其通讯步骤是为:(1)与下游建立一个连接(2)通过这个连接,收发请求(3)交互结束,关闭连接,释放资源这个连接是什么呢,通过连接怎么调用下游接口?服务/数据库/缓存,官方会提供不同语言的Driver、Document、DemoCode来教使用方建立连接与调用接口,以MongoDB的...原创 2017-11-10 07:53:59 · 869 阅读 · 0 评论 -
一分钟了解两阶段提交2PC
一、概念二阶段提交2PC(Two phase Commit)是指,在分布式系统里,为了保证所有节点在进行事务提交时保持一致性的一种算法。二、背景在分布式系统里,每个节点都可以知晓自己操作的成功或者失败,却无法知道其他节点操作的成功或失败。当一个事务跨多个节点时,为了保持事务的原子性与一致性,需要引入一个协调者(Coordinator)来统一掌控所有参与者(Participant)...原创 2017-11-10 08:06:01 · 658 阅读 · 0 评论 -
分层架构,是否需要业务服务层
《互联网分层架构的本质》简述了两个观点: 互联网分层架构的本质,是数据的移动 互联网分层架构演进的核心原则:是让上游更高效的获取与处理数据,让下游能屏蔽数据的获取细节 《分层架构:什么时候抽象DAO层,什么时候抽象数据服务层》中的观点是: 当手写代码从DB中获取数据,成为通用痛点的时候,就应该抽象出DAO层,简化数据获取过程,提高数据获取效率,向上游屏蔽底层的复杂性...原创 2017-10-24 22:13:31 · 1407 阅读 · 0 评论 -
互联网分层架构之-DAO与服务化
互联网分层架构的本质,是数据的移动。互联网分层架构演进的核心原则: 让上游更高效的获取与处理数据,复用 让下游能屏蔽数据的获取细节,封装 这些在上一篇《互联网分层架构的本质》中有详尽的描述,在实际系统架构演进过程中,如何利用这两个原则,对系统逐步进行分层抽象呢?咱们先从后端系统开始讲解。本文主要解答两个问题: 后端架构,什么时候进行DAO层的抽象...原创 2017-10-24 21:29:58 · 561 阅读 · 0 评论 -
互联网分层架构的本质
上图是一个典型的互联网分层架构: 客户端层:典型调用方是browser或者APP 站点应用层:实现核心业务逻辑,从下游获取数据,对上游返回html或者json 数据-缓存层:加速访问存储 数据-数据库层:固化数据存储 如果实施了服务化,这个分层架构图可能是这样:中间多了一个服务层。同一个层次的内部,例如端上的APP,以...原创 2017-10-24 08:03:37 · 314 阅读 · 0 评论 -
线上服务内存OOM问题定位三板斧
相信大家都有感触,线上服务内存OOM的问题,是最难定位的问题,不过归根结底,最常见的原因: 本身资源不够 申请的太多 资源耗尽 58到家架构部,运维部,58速运技术部联合进行了一次线上服务内存OOM问题排查实战演练,将内存OOM问题定位三板斧分享出来,希望对大家也有帮助。题目某服务器上部署了Java服务一枚,出现了OutOfMemoryError,...原创 2017-10-23 22:39:15 · 995 阅读 · 0 评论 -
线上操作与线上问题排查实战
技术同学需要经常登录线上的服务器进行操作,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 阅读 · 0 评论 -
开源全局配置中心XDiamond应用解析
简介:全局配置中心,存储应用的配置项,解决配置混乱分散的问题。名字来源于淘宝的开源项目diamond,前面加上一个字母X以示区别。特性:服务端:配置文件支持artifactId内部不同环境的继承和artifactId直接的依赖;支持groupId,artifactId,version,profile四个维度以应对复杂环境;可以对指定环境设置secret key防止非法...原创 2017-09-05 15:48:00 · 9195 阅读 · 1 评论 -
Spring-Bean初始化顺序
在验证spring-Bean初始化顺序前,先看几个关键接口InitializingBean Spirng的InitializingBean为bean提供了定义初始化方法的方式。InitializingBean是一个接口,它仅仅包含一个方法:afterPropertiesSet()。 在spring 初始化后,执行完所有属性设置方法(即setXxx)将自动调用 af...原创 2017-07-25 17:47:36 · 6475 阅读 · 0 评论 -
MySQL双主一致性架构优化
一、双主保证高可用MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点。在一个MySQL数据库集群中可以设置两个主库,并设置双向同步,以冗余写库的方式来保证写库的高可用。二、并发引发不一致数据冗余会引发数据的一致性问题,因为数据的同步有一个时间差,并发的写入可能导致数据同步失败,引起数据丢失:如...原创 2017-10-25 07:52:18 · 740 阅读 · 0 评论 -
MySQL冗余数据的三种方案
一,为什么要冗余数据互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。水平切分会有一个patition key,通过patition key的查询能够直接定位到库,但是非patition key上的查询可能就需要扫描多个库了。此时常见的架构设计方案,是使用数据冗余这种反范式设计来满足分库后不同维度的查询需求。例如:订单业务,对用户和商家都有订...原创 2017-10-25 08:05:26 · 2252 阅读 · 0 评论 -
一张“神图”看懂单机/集群/热备/磁盘阵列(RAID)
单机部署(stand-alone):只有一个饮水机提供服务,服务只部署一份集群部署(cluster):有多个饮水机同时提供服务,服务冗余部署,每个冗余的服务都对外提供服务,一个服务挂掉时依然可用热备部署(hot-swap):只有一个桶提供服务,另一个桶stand-by,在水用完时自动热替换,服务冗余部署,只有一个主服务对外提供服务,影子服务在主服务挂掉时顶上磁盘阵列RAID(Red...原创 2017-11-11 08:02:55 · 585 阅读 · 0 评论 -
58到家通用实时消息平台架构细节
一、解决什么问题 + 难点解决什么业务问题(1)端到云的实时上报需求:58速运司机端GPS实时上报(2)云到端的实时推送需求:58速运司机订单实时推送(3)端到端的聊天消息需求:用户、商户、客服之间的聊天沟通难点:(1)APP无线环境下消息可达性(2)通用性,平台实现尽量与业务解耦二、传统解决方案与潜在不足【端到云:http轮询上报GPS消息】方案...原创 2017-11-03 07:41:24 · 1934 阅读 · 0 评论 -
互联网智能广告系统简易流程与架构
一、业务简述从业务上看整个智能广告系统,主要分为:1)业务端:广告主的广告后台2)展现端:用户实际访问的页面业务端,广告主主要有两类行为:1)广告设置行为:例如设置投放计划,设置地域,类别,关键字,竞价等2)效果查看行为:例如广告展示次数是多少,广告点击次数是多少等展现端,用户主要也有两类行为:1)站点浏览行为:用户浏览实际的信息,此时广告系...原创 2017-11-03 08:03:35 · 1838 阅读 · 0 评论 -
到底什么时候该使用MQ
一、缘起一切脱离业务的架构设计与新技术引入都是耍流氓。引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问题(详见《互联网架构为什么要做微服务?》)。最近分享了几篇MQ相关的文章:《MQ如何实现延时消息》《MQ如何实现消息必达》《MQ如何实现幂等性》不少网友询问...原创 2017-10-26 22:01:50 · 373 阅读 · 0 评论 -
58同城推荐系统架构设计与实现
一、推荐系统架构介绍推荐系统是一个微庞大的工程、算法与业务综合的系统,其主要分为三大子系统:1)线下推荐子系统;2)线上推荐子系统;3)效果评估子系统;后文将重点讨论以上三大子系统的设计与实现。二、线下推荐子系统线下推荐子系统又主要分为线下挖掘模块、数据管理工具两大部分。线下挖掘模块线下挖掘模块,是各类线下挖掘算法实施的核心,它读取各种数据源,运用各种...原创 2017-11-06 08:06:16 · 1604 阅读 · 0 评论 -
消息“时序”与“一致性”为何这么难
分布式系统中,很多业务场景都需要考虑消息投递的时序,例如:(1)单聊消息投递,保证发送方发送顺序与接收方展现顺序一致(2)群聊消息投递,保证所有接收方展现顺序一致(3)充值支付消息,保证同一个用户发起的请求在服务端执行序列一致消息时序是分布式系统架构设计中非常难的问题,ta为什么难,有什么常见优化实践,是本文要讨论的问题。一、为什么时序难以保证,消息一致性难?为什么分...原创 2020-03-18 22:11:58 · 1644 阅读 · 0 评论