踏莎行·术
文章平均质量分 76
mindwind-_-
这个作者很懒,什么都没留下…
展开
-
知行:程序员如何保持二者的平衡
网上并不缺少告诉你 “采取行动” 的内容,很大程度上,它们希望你忘记学习并专注于行动。这些帖子的出发点也许是善意的,但并非事情的全貌。光学习不行动是没用的,但只行动不学习同样如此。程序员是知识工作者,这意味着学习是我们工作的必要部分,然而这需要我们去创造学习机会,关键在于平衡。如果你屁股一坐在那不停的收集文章却从不使用这些信息,那么你就需要偏向行动;但是,如果你盲目的进入行动,你也不会走得太...翻译 2019-01-03 20:32:22 · 520 阅读 · 1 评论 -
MongoDB 初见指南
技术若只如初见,那么还会踩坑么?在系统引入 MongoDB 也有几年了,一开始是因为 MySQL 中有单表记录增长太快(每天几千万条吧)容易拖慢 MySQL 的主从复制。而这类数据增长迅速的流水表,对数据一致性也没那么高要求,而且业务上也不需要关联查询它,就考虑分出去。为什么是 MongoDB?刚巧赶上公司 DBA 团队引入了这个数据库,有人帮助运维,对业务团队就成了一个自然的选择。不过对原创 2016-01-18 20:46:56 · 10564 阅读 · 13 评论 -
后端分布式系列:分布式存储-HDFS Client 设计实现解析
前面对 HDFS NameNode 和 DataNode 的架构设计实现要点做了介绍,本文对 HDFS 最后一个主要构成组件 Client 做进一步解析。流式读取HDFS Client 为客户端应用提供一种流式读取模型,就像访问本机文件系统一样来访问 HDFS。将复杂的分布式文件系统读取细节隐藏,简化了上层应用的使用难度。写过读取本机文件的程序员想必都很熟悉流式读取的编程模型,就不多说了。错误处理相原创 2015-09-01 15:55:46 · 1817 阅读 · 0 评论 -
后端分布式系列:分布式存储-HDFS 与 GFS 的设计差异
「后端分布式系列」前面关于 HDFS 的一些文章介绍了它的整体架构和一些关键部件的设计实现要点。 我们知道 HDFS 最早是根据 GFS(Google File System)的论文概念模型来设计实现的。 然后呢,我就去把 GFS 的原始论文找出来仔细看了遍,GFS 的整体架构图如下: HDFS 参照了它所以大部分架构设计概念是类似的,比如 HDFS NameNode 相当于 GFS Mast原创 2015-10-13 20:31:03 · 11478 阅读 · 3 评论 -
后端分布式系列:分布式存储-HDFS NameNode 设计实现解析
接前文 分布式存储-HDFS 架构解析,我们总体分析了 HDFS 架构的主要构成组件包括:NameNode、DataNode 和 Client。本文首先进一步解析 HDFS NameNode 的设计和实现要点。元数据持久化NameNode 将所有元信息以特定的数据结构组织存放在内存中,对于 namespace 和 replication factor 的信息会进行持久化,而映射关系则不会持久化。因为原创 2015-08-25 10:27:48 · 2429 阅读 · 0 评论 -
后端分布式系列:分布式存储-MySQL 数据库事务与复制
好久没有写技术文章了,因为一直在思考 「后端分布式」这个系列到底怎么写才合适。最近基本想清楚了,「后端分布式」包括「分布式存储」和 「分布式计算」两大类。结合实际工作中碰到的问题,以寻找答案的方式来剖解技术,很多时候我们都不是在创造新技术,而是在应用技术。为了更有效率与效果的用好技术,我们需要了解一些技术的原理与工作方式。带着问题从使用者的角度去剖析技术原理,并将开源技术产品和框架作为一类技术的参考原创 2015-11-03 22:17:49 · 6625 阅读 · 0 评论 -
后端分布式系列:分布式存储-HDFS DataNode 设计实现解析
前文分析了 NameNode,本文进一步解析 DataNode 的设计和实现要点。文件存储DataNode 正如其名是负责存储文件数据的节点。HDFS 中文件的存储方式是将文件按块(block)切分,默认一个 block 64MB(该大小可配置)。若文件大小超过一个 block 的容量可能会被切分为多个 block,并存储在不同的 DataNode 上。若文件大小小于一个 block 的容量,则文件原创 2015-08-26 10:29:19 · 3971 阅读 · 0 评论 -
后端分布式系列:分布式存储-HDFS 架构解析
本文以 Hadoop 提供的分布式文件系统(HDFS)为例来进一步展开解析分布式存储服务架构设计的要点。架构目标任何一种软件框架或服务都是为了解决特定问题而产生的。还记得我们在 《分布式存储 - 概述》一文中描述的几个关注方面么?分布式文件系统属于分布式存储中的一种面向文件的数据模型,它需要解决单机文件系统面临的容量扩展和容错问题。所以 HDFS 的架构设计目标就呼之欲出了:面向超大文件或大量的文原创 2015-08-21 21:24:45 · 6538 阅读 · 0 评论 -
后端分布式系列:分布式存储-HDFS 异常处理与恢复
在前面的文章 《HDFS DataNode 设计实现解析》中我们对文件操作进行了描述,但并未展开讲述其中涉及的异常错误处理与恢复机制。本文将深入探讨 HDFS 文件操作涉及的错误处理与恢复过程。读异常与恢复读文件可能发生的异常有两种:读取过程中 DataNode 挂了读取到的文件数据损坏HDFS 的文件块多副本分散存储机制保障了数据存储的可靠性,对于第一种情况 DataNode 挂了只需要失败原创 2015-09-02 10:26:20 · 4723 阅读 · 0 评论 -
一个 redis 异常访问引发 oom 的案例分析
「推断的前提是以事实为依据。」这两天碰到一个线上系统的偶尔出现突然堆内存暴涨,这倒不是个什么疑难杂症, 只是过程中有些思路觉得可以原创 2014-12-07 20:21:44 · 15362 阅读 · 0 评论 -
深入浅出 RPC - 深入篇
《深入篇》我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它? RPC 功能目标RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。为实现该目标,RPC 框架需提供一种透明调用机制让使用者不必显式的区分本地调用和远程调用,在前文《浅出篇》中给出了一种实现...原创 2014-09-22 11:25:10 · 320525 阅读 · 51 评论 -
系统的思考性能问题
本文翻译自《Thinking Methodically about Performance》作者 Brendan Gregg, JOYENT日期2012/12/10摘要提出了一种针对性能问题的 USE 方法,它指出了其他通常使用的方法学的缺陷。性能问题可能是复杂和神秘的,几乎没有什么线索来找到它的根源。 由于缺少一个切入点(或者说缺少方法学来提供一个切入翻译 2013-10-21 13:02:22 · 3886 阅读 · 0 评论 -
认清性能问题
本文翻译自《Thinking Clearly About Performance》作者 Cary Millsap, Method R Corporation, Southlake, Texas, USA校订2010/07/22摘要对于开发者、技术管理者、架构师、系统分析师和项目经理来说,创建具备高性能特征的复杂软件都是一件极其困难的事。 然而,通过了解一些基本原翻译 2013-09-10 08:47:40 · 4244 阅读 · 1 评论 -
深入浅出 RPC - 浅出篇
近几年的项目中,服务化和微服务化渐渐成为中大型分布式系统架构的主流方式,而 RPC 在其中扮演着关键的作用。 在平时的日常开发中我们都在隐式或显式的使用 RPC,一些刚入行的程序员会感觉 RPC 比较神秘,而一些有多年使用 RPC 经验的程序员虽然使用经验丰富,但有些对其原理也不甚了了。 缺乏对原理层面的理解,往往也会造成开发中的一些误用。本文分上下两篇《浅出篇》和《深入篇》,其目标就是想尝试原创 2014-09-22 11:06:05 · 76540 阅读 · 24 评论 -
Web API 设计摘要
最近读了一本微电子书 Brian Mulloy 所著《Web API Design》感觉颇多收获,特对其内容做了个整理摘要以便回顾其观点精华以指导日常工作中的设计思路。本文主要讲述 Web API 设计,追求一种更务实的 REST 风格。 正如作者所说 REST 是一种架构风格,而非严格的标准,没必要在形式定义上去做过多真论,到底什么才是真正的 REST? 设计的目的是为了表达原创 2014-06-24 19:20:04 · 3807 阅读 · 0 评论 -
Redis 集群的合纵与连横
之前一篇写了关于 Redis 的性能,这篇就写写我认为比性能更重要的扩展性方面的主题。如果再给我一次回到好几年前的机会,对于使用 Redis 我一开始就要好好考虑将来的扩展问题。就像我们做数据库分库分表,一旦决策了分库分表,通常一次就会分到位,比如搞上 8 或 16 个库,每个库再分 256 或 1024 个表。不管将来业务再怎么发展,基本这个量级的分片都足够应对,而且底层库可以做成逻辑的,扛不住时原创 2016-01-04 23:48:01 · 11510 阅读 · 5 评论 -
京东咚咚架构演进
咚咚是什么?咚咚之于京东相当于旺旺之于淘宝,它们都是服务于买家和卖家的沟通。 自从京东开始为第三方卖家提供入驻平台服务后,咚咚也就随之诞生了。 我们首先看看它诞生之初是什么样的。1.0 诞生(2010 - 2011)为了业务的快速上线,1.0 版本的技术架构实现是非常直接且简单粗暴的。 如何简单粗暴法?请看架构图,如下。1.0 的功能十分简单,实现了一个 IM 的基本功能,接入、互通消息和状态。 另原创 2015-12-03 21:05:33 · 14105 阅读 · 19 评论 -
RPC 使用中的一些注意点
最近线上碰到一点小问题,分析其原因发现是出在对 RPC 使用上的一些细节掌握不够清晰导致。很多时候我们做业务开发会把 RPC 当作黑盒机制来使用,但若不对黑盒的工作原理有个基本掌握,也容易犯一些误用的微妙错误。虽然曾经已经写过一篇《RPC 的概念模型与实现解析》 从概念模型和实现细节上讲述了 RPC 的原理,这一篇就从使用上的一些注意点来捋一捋吧。同步RPC 的调用通常为了方便使用,会被伪装成普通方原创 2016-12-25 21:01:01 · 6247 阅读 · 4 评论 -
HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是模糊的知道大概是更安全,但到底怎么变得更安全的,实际上整个细节和流程并没有掌握的特别清晰。所以这篇关于 HTTPS 的技术总结文章,主要提供一个关于 HTTPS 中的 S 一个整体的认识。从其产生的历史原创 2016-11-20 22:21:38 · 4128 阅读 · 4 评论 -
HA 高可用软件系统保养指南
又过了一年 618,六月是公司一年一度的大促月,一般提前一个月各系统就会减少需求和功能的开发,转而更多去关注系统可用性、稳定性和管控性等方面的非功能需求。大促前的准备工作一般叫作「备战」,可以把线上运行系统想象成一辆车,大促即是它即将面临的一次严峻驾驶考验。每次去长途自驾旅行时,我会把车送去对车况做一个全面的检测。汽车工业的历史有一百多年了,而车的构造组成部件又相对固定,已经形成了规范且全面的检查事原创 2016-06-26 22:49:38 · 3630 阅读 · 0 评论 -
RPC 的概念模型与实现解析
今天分布式应用、云计算、微服务大行其道,作为其技术基石之一的 RPC 你了解多少?一篇 RPC 的技术总结文章,数了下 5k+ 字,略长,可能也不适合休闲的碎片化时间阅读,可以先收藏抽空再细读:)全文目录如下:定义起源目标分类结构 模型拆解组件实现 导出导入协议 编解码消息头消息体传输执行异常总结参考 两年前写过两篇关于 RPC 的文章,如今回顾发现结原创 2016-05-22 22:41:14 · 21746 阅读 · 1 评论 -
LB 负载均衡的层次结构
作为后端应用的开发者,我们经常开发、调试、测试完我们的应用并发布到生产环境,用户就可以直接访问到我们的应用了。但对于互联网应用,在你的应用和用户之间还隔着一层低调的或厚或薄的负载均衡层软件,它们不显山不露水默默的发挥着重要的作用,以至于我们经常忽略了它们的存在。因为负载均衡层通常不在一般开发人员的问题域内,而且它们一般都是现成且成熟的解决方案,以至于我们习惯性的忽略和认为乏善可陈。其实不然,本文就写原创 2016-03-31 01:10:49 · 8758 阅读 · 0 评论 -
最近碰到的一些 SSL 问题记录
最近碰到一些 SSL 的小问题,特记录下。我们有个 Java 实现的 SSL TCP 服务端,为客户端(PC、Android 和 iOS)提供 SSL 接入连接服务。最近有用户反馈其手机上 App 不能正常连接登录,别人手机上都可以。经过单独回访调查该用户使用的手机操作系统是 Android 6.0,经搜索了解了 Android 6.0 之后 Google 使用了自家的 BoringSSL 替换了原原创 2016-02-16 16:43:11 · 5043 阅读 · 0 评论 -
MySQL 数据库主从复制架构
前文《MySQL 数据库事务与复制》分析了 MySQL 复制过程中如何保证 binlog 和事务数据之间的一致性,本文进一步分析引入从库后需要保证主从的数据一致性需要考虑哪些方面。原生复制架构 MySQL 的原生复制架构原理如上图所示。从库的 I/O Thread 线程负责不断读取主库的 binlog 日志文件并写入本地的 Relay log 临时缓存。从库的 SQL Thread 线程则不断读取原创 2016-01-12 18:53:27 · 8914 阅读 · 6 评论 -
Redis 的性能幻想与残酷现实
2011 年,当初选择 Redis 作为主要的内存数据存储,主要吸引我的是它提供多样的基础数据结构可以很方便的实现业务需求。另一方面又比较担心它的性能是否足以支撑,毕竟当时 Redis 还属于比较新的开源产品。但 Redis 官网宣称其是提供多数据结构的高性能存储,我们对其还是抱有幻想的。幻想要了解 Redis 的性能,我们先看看官方的基准性能测试数据,心里有个底。测试前提Redis versio原创 2015-12-22 20:30:05 · 6554 阅读 · 7 评论 -
MySQL 数据库双向同步复制
MySQL 复制问题的最后一篇,关于双向同步复制架构设计的一些设计要点与制约。问题和制约数据库的双主双写并双向同步场景,主要考虑数据完整性、一致性和避免冲突。对于同一个库,同一张表,同一个记录中的同一字段的两地变更,会引发数据一致性判断冲突,尽可能通过业务场景设计规避。双主双写并同步复制可能引发主键冲突,需避免使用数据库自增类主键方案。另外,双向同步潜在可能引发循环同步的问题,需要做回环控制。如上图原创 2015-12-22 20:38:18 · 22358 阅读 · 0 评论 -
分布式存储概述
分布式存储是相对于单机存储而言,之所以要分布自然是因为互联网时代信息数据大爆炸,单机已经难以满足大型应用的数据存储需求。存储系统的关注点关于存储系统,一般我们关注下面几个方面: 数据分布与负载均衡 数据存储的可靠性与一致性 数据访问性能 系统容错能力 系统扩展能力 在单机存储系统中有一种独立磁盘冗余阵列(RAID,redundant array of independent原创 2015-12-22 20:44:27 · 11534 阅读 · 2 评论 -
程序员的视角:java 线程
在我们开始谈线程之前,不得不提下进程。无论进程还是线程都是很抽象的概念,有一个关于进程和线程很形象的比喻能帮我们更好的理解。进程就像个房子,房子是一个包含了特定属性的容器,例如空间大小、卧室数量等。 如果你也这样看的话,那么房子自己不会主动做任何事情,它是被动的对象。 而线程则像是房中的居住者,它是主动的对象——居住者要使用不同的房间、看电视、煮饭、洗澡等等。 房子占据着一块真实的土地,正原创 2014-03-30 11:05:00 · 3262 阅读 · 0 评论 -
编码指南:寻找科学中的艺术
本文翻译自《Coding Guidelines: Finding the Art in the Science》作者 Robert Green, Henry Ledgard日期2011/11/02好代码和伟大的代码的区别是什么?计算机科学既是科学也是艺术。它科学的一面涵盖了从计算理论、算法研究到代码设计和编程架构。然而,当提及实现时,艺术的光芒、微妙翻译 2014-01-05 00:25:36 · 2608 阅读 · 0 评论 -
java字符集的欺骗性
作者:mindwind @云下山巅"多少年来,乱码问题一直是程序员心中的痛。 多少程序员,在乱码中迷乱却不见字符集的偷笑。"----------------------------------------------------------------------------------今天一同事突然跑来找我,说我们之间的线上系统接口突然返回消息出现中文原创 2013-04-19 16:20:36 · 4261 阅读 · 1 评论 -
NIO系列5:事件模型
前文讲述了NIO数据读写处理,那么这些数据最终如何被递交给上层业务程序进行处理的呢?NIO框架一般都采用了事件派发模型来与业务处理器交互,它与原生NIO的事件机制是模型匹配的,缺点是带来了业务处理的碎片化。需要业务程序开发者对事件的生命周期有一个清晰的了解,不像传统方式那么直观。事件派发器(EventDispatcher)就成为了NIO框架中IO处理线程和业务处理回调接口(Handler)原创 2012-04-01 08:10:48 · 3414 阅读 · 0 评论 -
IM设计思考:基于同步HTTP双向流(BOSH)的web im机制
在XMPP扩展协议XEP-0124中定义了一个传输协议来模拟两个实体 (例如一个客户端和一个服务器) 之间的长连双向TCP连接的语义,它有效地运用多个同步的HTTP"请求/应答"对,而不需要使用频繁的轮询或者分块响应。该协议简称BOSH(Bidirectional-streams Over Synchronous HTTP),协议的设计目标之一是提供准TCP的连接性能同时兼容受约束的运行环境。原创 2012-04-09 17:16:11 · 11569 阅读 · 4 评论 -
rsync入门
rsync是Linux/unix下一个用于远程文件(目录)同步的一个精巧的小工具程序,有很多文章讨论了其功能和实现原理,本文主要就不赘述了。主要介绍下实践时使用的一些方法和细枝末节留作工作笔记以便日后参考。大部分的Linux发布包中基本都默认包含了rsync这个小工具,这里就不介绍其安装了。使用场景用rsync同步程序部署包到单个或多个测试机上。模式rsync支持6种工作模原创 2012-05-29 20:03:42 · 8394 阅读 · 1 评论 -
Lease 机制在分布式系统中的应用
Lease 中文叫租约,是一种广泛应用于分布式系统领域的协议,它是一种维护分布式系统一致性的有效工具。Lease 通常定义为:颁发者在一定期限内給予持有者一定权利的协议。Lease 表达了颁发者在一定期限内的承诺,只要未过期颁发者必须严格遵守 lease 约定的承诺。Lease 的持有者在期限内使用颁发者的承诺,但 lease 一旦过期必须放弃使用或者重新和颁发者续约。下面看看 l原创 2012-08-24 11:47:58 · 12095 阅读 · 4 评论 -
网站安全认证系统的设计变迁
网站在从小到大的发展历程中,安全认证系统是如何变迁的? 下面我们从其发展的几个阶段来分下: 阶段1: 起步,注册用户很少,两台服务器,一台应用服务器,一台数据库服务器。 用户登陆后在应用服务器记录用户 session (通常就是 tomcat session)。 当用户请求受保护资源(网页)时,首先请求经过一个安全认证过滤器原创 2012-08-24 18:17:29 · 3343 阅读 · 0 评论 -
Timing Wheel 定时轮算法
最近自己在写一个网络服务程序时需要管理大量客户端连接的,其中每个客户端连接都需要管理它的 timeout 时间。通常连接的超时管理一般设置为30~60秒不等,并不需要太精确的时间控制。另外由于服务端管理着多达数万到数十万不等的连接数,因此我们没法为每个连接使用一个Timer,那样太消耗资源不现实。最早面临类似问题的应该是在操作系统和网络协议栈的实现中,以TCP协议为例:其可原创 2012-09-29 21:52:51 · 30734 阅读 · 16 评论 -
Redis 事务
Redis 提供的事务机制与传统的数据库事务有些不同,传统数据库事务必须维护以下特性:原子性(Atomicity), 一致性(Consistency), 隔离性(Isolation), 持久性(Durability),简称ACID。我们逐项考察下 Redis 在事务的 ACID 上做出的权衡与取舍:原子性(Atomicity)原子意味着操作的不可再分,要么执行要么不原创 2012-10-28 17:43:32 · 27707 阅读 · 2 评论 -
TCP/IP学习笔记:IP
IP协议定义传输的基本单元、支持路径选择和包含一组不可靠分组交付思路的规则。IP协议数据报格式如下版本:IPv4首部长度:20字节,不含填充和选项服务类型:优先级指示,用于路由算法提示,帮助路由器根据本地策略和对路径上可用硬件的知识选择不同的路由路径总长度:2字节表示长度,所以IP包最大长度65535字节,但实际受限于物理网络的MTU大小,例如以太网的 MTU 1500原创 2011-10-28 15:30:06 · 1431 阅读 · 0 评论 -
TCP/IP学习笔记:地址分类与协议分层
ip地址分类保留地址ISO/X.25 7层参考模型TCP/IP 5层模型重要概念分界线TCP/IP与X.25在主要差别之一在于提供可靠数据传输服务的方式不同:TCP/IP在传输层保障端到端的可靠性,X.25在每个层次提供自己的可靠性原创 2011-11-03 10:16:20 · 1481 阅读 · 0 评论 -
TCP/IP学习笔记:UDP
UDP工作在TCP/IP协议分层第4层,是一种传输协议。UDP使用IP协议来携带报文,提供不可靠的无连接传输服务,增加了对给定主机多个目的地进行区别的能力(基于协议端口)IP层只负责在互联网上的一对主机之间进行数据传输,而UDP只负责区分一台主机上的多个源端口或目的端口UDP报文格式UDP引入伪首部进行校验和计算 伪首部格式原创 2011-11-03 14:11:03 · 1253 阅读 · 0 评论