第三期续:Java大数据高并发系统架构实战方案课程(2T 架构师干货分享)

-回复 -浏览
楼主 2018-12-05 16:29:21
举报 只看此人 收藏本贴 楼主


为了帮助大家更好成长为一个优秀的架构师,

连续分享10期

 发送 【c3e8】 获取第三期(续)

《第二十三阶段、Java大数据高并发系统架构实战方案课程》

架构师分享资料



连续分享10期

 发送 【0002】 获取第二期架构师分享资料


 发送 【0001】 获取第一期架构师分享资料





架构师的职责是设计一个信息系统的架构,设计过程需要将系统分解为很多个不同的部分,定义各个子系统之间的通信接口,以及各个子系统的技术选型。

要成为一个架构师,就需要对设计一个信息系统的各种子系统有所了解。这样才能在面对新的项目时,使用各个组件如同积木一般,选择最合适的部分来搭建信息系统。如下分为几个大的组成部分:

1. 通信协议
各个子系统之间要进行通信,必须要选择一种或多种通信协议,现代比较常见的都是基于HTTP的协议。更早期,为了追求性能,有过一些基于TCP协议的实现。建议还了解下CORBA等RPC方式。了解更多协议对于学习安全也有很大帮助,比如MySQL和PostgreSQL的协议都有安全的设计。


2. 序列化
系统之间通过网络传输,或者存储到文件时,肯定只有一种格式,就是字符串。要将复杂的数据结构与字符串之间进行转换,就需要用到序列化。简单的序列化如JSON和XML,稍微复杂些的有protobuf、thrift等。需要了解所有这些序列化方式之间的优势和劣势。比如JSON和XML只能用于传递数据,而protobuf与thrift还可以用来做RPC协议。至少要确保每种序列化方式都自己尝试过hello world。


3. 数据库
要形成自己的数据库选取风格,就需要先对自己常用的数据库有足够深入的了解。对于关系式数据库,除了一般的Create、Query、Delete、Update操作外。还需要能自行建立索引,数据库的平行扩展,了解如何进行性能调试。以及了解常见查询操作的性能级别,常见的查询性能瓶颈点。一个较好的例子是 "SELECT COUNT(*) FROM table WHERE dt_create-86400>NOW();" 。


4. 存储
存储分为几种类型。NAS等各家产品有所不同,大多是通过NFS来访问的,这个不必多讲。问题是NAS的价格很高,而且在去IOE的趋势中很多人也不愿意再用。所以经常会有基于文件系统建立小规模存储的需求。要关注的点主要就是每个目录下的文件数不应该太多,当一个目录下文件数(实际是inode数量,包括文件和目录)超过1000时,性能就很差了。所以建议的做法是将一个系统中要存储的对象ID做16进制,随后每2位16进制做成一级目录。这样可以确保每个目录下的文件数不会超过256个。现代云计算,如Amazon S3已经把存储的问题解决的很好了,如果可能,尽量用好。


5. 应用框架
此事在各个语言之间各有选择,多注意了解自己关注方向的所有框架的优势和劣势。至少当有个毛头孩子问你为什么不选择某个最新的框架时,要有自己的观点来给出明确的答复。对于常见的框架,十分推荐自己重新实现一个来当作锻炼。实现一个WEB框架,他用了不到200行代码就实现了。


6. 接口
主要是指接口协议,或者RPC协议。系统之间进行RPC调用很常见,注意选择个自己能熟练使用的,并且有所深入研究。并了解其常见的限制。RESTful API就是个比较常见的选择,但是性能并不好。要自己对性能等参数有个量化的了解,而不是简单的一句好或不好。短连接接口在三次握手时是串行操作,要了解其为何耗时。

除了要在如上的各种不可或缺的组成部分中有所了解,还要能清楚的知道一些常用系统模块的原理,并能够很深入的玩起来。几个值得注意的:

1. HTTP服务器:常见的无非是nginx、apache,自己要能进行基本配置,包括静态文件、fastcgi转发等
2. 关系式数据库:常见的如mysql、postgresql、sqlite,自己要对每一种都有深入的了解。自己要做一遍常见操作的性能测试,并能牢记于心。比如sqlite虽然并不需要走网络,但是实际查询性能是很差的。我2008年就发现其 "<"和">"共同作用的查询的例子比走网络的mysql还慢了几十倍。
3. NoSQL数据库:memcache、redis、mongodb等,近几年有很多,挨个了解下其实现原理,以及各种常用操作的性能。当有需要时,要随时能拿得出手来用。
4. 云计算平台:几种常见的云计算平台的应用方式要有了解,如Google的资源方式,和Amazon的VPS方式,每种云计算平台往往还会提供一大堆的附加服务,比如可靠数据库,存储,缓存等,也要分别有所了解。
5. 加密/签名技术:常见如truecrypt、openssl、gnu pg、sha1、md5、scrypt等,了解各种加密/签名技术的安全性,字长等,并都能自己做过hello world。

一些网上常见的系统服务形式的架构设计也要仔细了解清楚。一般此类系统的开发人员,往往会通过个人博客,或者一些活动的PPT中进行讲解。仔细找找会有不少收获。值得关注的常见系统架构

1. 博客/论坛:博客和论坛有很多,并且各个网站也都很常用,了解下其原理,最好自己写个练习下。
2. 微博:Twitter/weibo等,涉及到大量的联表查询,需要用多种办法来优化查询性能。
3. 云计算:云计算的几个常见平台的服务提供方式,如Google和Amazon的,如果精力够用最好了解下OpenStack等搭建私有云的方式,总的来说,这是未来的大方向。
4. 视频播放:在网页上播放视频的技术,包括基于Flash和HTML5的,各种浏览器对视频的兼容性等,了解通过ffmpeg将一个视频转换为标准mp4(HTML5可以播放的)的方式和参数
5. CDN:了解应用CDN的方式,包括拆分静态文件的域名,静态文件版本化,Cookie拆分等相关技术
6. OAuth:与其他网站联合认证的方式,有多种,分别了解。

常见的架构设计陷阱:

1. 用户认证:一开始就应该花大精力设计好用户认证系统,包括不要明文存储密码,包括严格限制Cookie和Session的使用,包括用户认证信息的缓存等。如果需要设计一个长期运行的大系统,强烈建议使用签名来保证Cookie的不可伪造,同时常见信息直接存储Cookie,这样可以避免每次Request都访问数据库。


2. 静态文件存储:如果一开始就将静态文件与主站内容混杂在一起,未来就是个灾难,具体参考CDN的应用方式。





往期热门回顾

【干货】2T 架构师干货 (2000G 百度视频网盘)

【干货】2017上半年最全投融资报告 (附PDF文档下载)

【PPT下载】MySQL 网易内部教程(附PDF文档)

干货】程序员都应该访问的最佳网站

干货】为什么我总是觉得很疲惫?你可能不会正确地休息

干货】乐视融资700亿 PPT流出,文末近千页PPT免费下载!





是这么简单粗暴!赶紧关注吧!


高端技术圈小鹅通





我要推荐
转发到

友情链接