《小团队构建大网站:中小研发团队架构实践》是一本值得推荐的书籍。作者借助自己十几年的工作经验,总结出了一套系统又详细、可落地的中小研发团队架构实践指导方案。本书分为五个部分,开篇的导读对书籍进行了整体的介绍,介绍了本书的主旨和内容。接下来的架构篇介绍了总体架构设计、应用架构设计、统一公司应用分层以及性能调优WinDbg等内容,为读者提供了全面的架构设计指导。框架篇则介绍了中间件和工具的使用,帮助读者更好地运用工具来提升开发效率。公共应用篇关注技术与业务的结合,为读者提供了技术与业务结合的方法和思路。最后的案例篇则提供了技改案例和技术与业务的匹配与融合等实际案例,帮助读者更好地理解和应用所学知识。通过本书,读者可以获得对网站开发、网站架构方面的深入了解,同时也能够得到实际的实践指导和案例分析,是一本非常实用的技术指南。
小团队构建大网站:中小研发团队架构实践 电子书封面
内容总结
一、概述
往往程序员在面试的时候,很多时候面试官会考察你对一个大型网站系统的设计思路。
首先我们要思考一个问题,什么样的网站才是大型网站,从网站的技术指标角度考虑这个问题人们很容易犯一个毛病就是认为网站的访问量是衡量的指标,懂点行的人也许会认为是网站在单位时间里的并发量的大小来作为指标
其实这种网站访问量非常大,并发数也非常高,但是它却能用最为简单的Web技术来实现:我们只要保持网站的充分的静态化,多部署几台服务器,那么就算地球上所有人都用它,网站也能正常运行。
大型网站是技术和业务的结合,一个满足某些用户需求的网站只要技术和业务二者有一方难度很大,必然会让企业投入更多的、更优秀的人力成本实现它,那么这样的网站就是所谓的大型网站了。
互联网时代,怎么构建一个大型网站是不可缺少的技能。当然,本人目前接触的网站都是读远远大于写。本文将一步步讲诉,怎么去使用lamp构建完善一个大型网站
网站架构,我个人认为最为重要的是两方面的考虑:计算和存储。有些是属于计算密集型,有些是IO密集型。所以以下都将围绕计算和存储来讲述问题。
二、最简单的搭建
假设我们自己创业了,那么我们可能需要自己去搭建一个网站。
这个时候,我们需要去租借一个主机(比如阿里云的虚拟主机等)。对于网站来说,数据是最为重要的,所以需要有一个备份。但是每天pv肯定不高,所以理论上只需要一个计算机器即可。因此,我们只需要3台机器就能完整一个完整的架构。
image
从上图可以看到计算机器上主要部署2部分内容,一部分是webserver(轻量级可以考虑niginx,lighttpd等),一个是UI逻辑处理部分,lamp架构则使用php语言来搞定这个问题。因为数据是最重要的,所以database则明显需要2台机器,一台主机,一台做冗余备份。lamp使用mysql来存储数据。
三、增加数据缓存
随着我们网站知名度变高,每天pv越来越大,导致的问题是数据库压力越来越大。很明显,绝大部分网站,**读流量都远远高于写流量。**即使我们开了mysql的query cache,它也只能在一定程度上通过减少DB机器I的操作来减少DB服务器压力。更为靠谱的是,减少对DB服务器的请求。那么这个时候就需要使用cache.
cache为非关系型kv存储,在使用过程中一般为内存操作。下面的架构改进如下。
可以看出ui写数据仍然直接写入到数据库,但是读则先从cache读取,cache读取不到再从database读取。因为很有可能大部分数据都直接访问cache就可以搞定,这样就可以大大减少数据库的压力。
内容介绍
本书结合作者近几年的工作经验,总结了一套可直接落地、基于开源、成本低、可快速搭建的中小研发团队架构实践方法。本书共5篇22章,开篇是本书的导读;架构篇是设计思想的提升,包括企业总体架构、应用架构设计、统一应用分层等;框架篇主讲中间件和工具的使用,包括消息队列、缓存、Job、集中式日志、应用监控和微服务等;公共应用篇是技术与业务的结合,包括单点登录和企业支付网关;进阶篇是从架构到管理,包括技改案例、技术与业务的匹配与融合等。从架构、框架、公共应用,到案例实战和技术管理,本书将大公司的工程理念压缩应用到中小研发团队,使小团队也能构建大网站。
目录
- 第1篇 开篇
- 1 可参考的才是有价值的(含案例和代码)
- 1.1 框架篇—工欲善其事,必先利其器
- 1.2 架构篇—思想提升
- 1.3 公共应用篇—业务与技术的结合
- 1.4 进阶篇—从架构到管理
- 1.5 案例参考和Demo下载
- 第2篇 架构篇
- 2 企业总体架构
- 2.1 企业商务模型
- 2.2 架构现状
- 2.3 领域模型
- 2.4 架构规划
- 2.5 架构实施
- 2.6 案例参考
- 3 应用架构设计
- 3.1 初识架构设计
- 3.2 应用架构设计案例
- 3.3 更多知识探讨
- 3.4 互联网公司的架构设计要怎么落地
- 3.5 你给技术打个分
- 3.6 案例参考
- 4 统一应用分层
- 4.1 为什么要统一应用分层
- 4.2 统一应用逻辑架构
- 4.3 分层规范实践
- 4.4 互动问答
- 4.5 Demo下载
- 5 生产环境诊断工具WinDbg
- 5.1 诊断工具简介
- 5.2 获取异常进程的Dump文件
- 5.3 WinDbg的使用方法
- 5.4 一个真实案例
- 5.5 Demo下载
- 第3篇 框架篇
- 6 RabbitMQ快速入门及应用
- 6.1 为什么要用消息队列RabbitMQ
- 6.2 RabbitMQ简介
- 6.3 RabbitMQ的工作原理
- 6.4 RabbitMQ的基本用法
- 6.5 Demo下载
- 7 Redis快速入门及应用
- 7.1 Redis简介
- 7.2 Redis的数据结构
- 7.3 Redis的重要特性
- 7.4 使用方法
- 7.5 Redis Key命名规范与常见问题
- 7.6 Demo下载
- 8 任务调度Job
- 8.1 Job简介
- 8.2 WinJob
- 8.3 HttpJob
- 8.4 Cron表达式
- 8.5 Demo下载
- 9 应用监控系统Metrics
- 9.1 Metrics简介
- 9.2 埋点Metrics.NET的方法
- 9.3 Grafana配置
- 9.3.1 设置仪表盘(Dashboard)
- 9.3.2 设置面板(Panel)
- 9.3.3 设置模板Templating
- 9.3.4 设置Time Range
- 9.3.5 告警设置
- 9.4 其他说明
- 9.5 Metrics的使用价值
- 9.6 Demo下载
- 10 集中式日志ELK
- 10.1 集中式日志
- 10.2 配置方法
- 10.3 使用方法
- 10.4 Demo下载
- 11 微服务架构MSA
- 11.1 MSA简介
- 11.2 MSA框架的使用
- 11.3 微服务治理
- 11.4 微服务网关API Gateway
- 11.5 Demo下载
- 12 搜索服务Solr
- 12.1 Solr简介
- 12.2 Solr的工作原理
- 12.3 Solr的特性
- 12.4 Demo下载
- 13 分布式协调器ZooKeeper
- 13.1 ZooKeeper是什么
- 13.2 ZooKeeper的工作原理简介
- 13.3 ZooKeeper的典型应用场景
- 13.4 Demo下载
- 14 小工具合集
- 14.1 ORM工具
- 14.2 对象映射工具
- 14.3 IoC工具
- 14.4 DLL包管理工具
- 14.5 Demo下载
- 15 一键发布和测试之持续集成工具Jenkins
- 15.1 Jenkins简介
- 15.2 Jenkins插件与相关工具
- 15.3 Jenkins关键配置
- 15.4 Jenkins的使用价值
- 第4篇 公共应用篇
- 16 单点登录
- 16.1 单点登录简介
- 16.2 SSO技术实现
- 16.3 JWT规范
- 17 企业支付网关
- 17.1 企业支付网关介绍
- 17.2 统一支付服务
- 17.3 统一支付通知
- 17.4 Demo下载
- 第5篇 进阶篇
- 18 技改之路:从单体应用到微服务
- 18.1 系统背景
- 18.2 前期工作
- 18.3 技改实施
- 18.4 总结
- 18.5 互动问答
- 19 机票垂直搜索引擎之性能优化
- 19.1 行业背景与垂直搜索
- 19.2 主要问题与解决方案
- 19.3 静态数据与任务打底
- 19.4 缓存策略与数据一致
- 19.5 实时查询与三段超时
- 19.6 政策匹配与算法优化
- 19.7 小结
- 20 上云纪要
- 20.1 为什么要上云
- 20.2 内部虚拟化和外部云化
- 20.3 云选型
- 20.4 上云八条
- 20.5 成功上云
- 20.6 上云总结
- 21 技术与业务的匹配与融合
- 21.1 技术人员与业务人员的抱怨
- 21.2 问题出在哪里
- 21.3 理解源于彼此的了解
- 21.4 如何去匹配与融合
- 21.5 什么在驱动公司的发展
- 22 研发团队文化是怎么“长”出来的
- 22.1 神秘的文化
- 22.2 遇到的问题
- 22.3 解决之道
- 22.4 总结与提升
- 22.5 “长”出来的团队文化
- 后记
- 架构师进阶之路
- 谈谈互联网公司的技术架构和管理
- 短评
一般来说,技术人员(程序员)创业都是根据自己技术背景选择自己最熟悉的语言,不过考虑到不可能永远是您一个人写程序,这点还得仔细想想。无论用什么语言,最终代码质量是看管理,所以我们还是从纯语言层面来说实际一点。现在流行的java、php、.net、python、ruby都有自己的优劣,python和ruby,现在人员还是相对难招一些,性能优化也会费些力气,.net平台买不起windows server。java、php用的还是最多。对于初期,应用几乎都是靠前端支撑的网站来说,php的优势稍大一些,入门简单、设计模式简单、写起来快、性能足够等,不过不注重设计模式也是它的劣势,容易变得松散,隐藏bug稍多、难以维护。java的优势在于整套管理流程已经有很多成熟工具来辅助,强类型也能避免一些弱智BUG,大多数JAVA程序员比较注重设计模式,别管实不实际,代码格式看起来还是不错的。这也是个劣势,初学者可能太注重模式而很难解决实际需求。 前端不只是html、css这类。整个负责跟用户交互的部分都是前端,包括处理程序。这类程序还是建议用php,主要原因就是开发迅速、从业人员广泛。至于后端例如行为分析、银行接口、异步消息处理等,随便用什么程序,那个只能是根据不同业务需求来选择不同语言了。
我们把网站建设类型主要分成几个大类:企业站、商城、门户、论坛、功能网站、其他,其中企业站主要是有两大类营销型网站和品牌型网站,其他的不常见的有政府和学校网站、博客等等。所以整体总结下来就是8个主要类型: (一)营销型网站 (二)品牌型网站 (三)商城型网站 (四)门户型网站 (五)论坛 (六)功能型网站 (七)政府网站 (八)学校网站 还有一些小众化的比如说博客、贴吧等等,这里就不多说了。想要做网站的朋友可以提前做个准备,自己想要什么类型的,准备好能更好的与建站公司沟通。