架构

我做系统架构的一些原则

工作 20 多年了,这 20 来年看到了很多公司系统架构,也看到了很多问题,在跟这些公司进行交流和讨论的时候,包括进行实施和方案比较的时候,都有很多各种方案的比较和妥协,因为相关的经历越来越多,所以,逐渐形成了自己的逻辑和方法论。今天,想写下这篇文章,把我的这些个人的经验和想法总结下来,希望能够让更多的人可以参考和借鉴,并能够做出更好的架构来。另外,我的这些思维方式和原则都针对于现有市面上众多不合理的架构和方案,所以,也算是一种“纠正”……(注意,这篇文章所说的这些架构上的原则,一般适用于相对比较复杂的业务,如果只是一些简单和访问量不大的应用,那么你可能会得出相反的结论)…

从 0 到 1 亿用户的架构设计

图片

Kirill Sh@Unsplash

高可用架构设计最核心的就是两点:解耦和冗余。解耦包括业务状态分离(无状态架构设计)、分库分表等。冗余包括缓存、CDN、主从备份、主主备份、GeoDNS 等。一个好的架构设计需要在产品迭代的不同阶段选择合适的技术,从而既能在合理的成本条件下有效保障当前的业务需求,又能考虑到业务下一步发展的可能性。原文链接:[How to design a system to scale to your first 100 million users](https://levelup.gitconnected.com/how-to-design-a-system-to-scale-to-your-first-100-million-users-4450a2f9703d)

对于软件架构师来说,设计一个支持数亿用户的系统是一个巨大的挑战(不过在读了这篇文章后,也许就没那么难了)

以下是本文涉及的一些主题:

  • 从最简单的开始:单体架构

  • 可伸缩性的艺术:水平扩展(scaling out),纵向扩展(scaling up)

  • 关系型数据库的可扩展性:主从备份、主主备份、联合、分片、去规范化和 SQL 调优

  • 数据库选型:NoSQL 还是 SQL?

  • 高级概念:缓存、CDN、GeoDNS 等

我们暂时不讨论高性能计算中的其他常用术语,比如容错、可靠性、高可用性等。

让我们平静一下,旅程即将开始!

从 0

HTTP/2服务器推送已死

HTTP/2附带的热门功能之一是PUSH帧。主要思想是,如果服务器可以预测客户端可能要发出的请求,则服务器可以抢先向客户端发送请求/响应对并预热其缓存。

这是我很久以来一直很感兴趣的功能。我认为API使缓存无效和预热缓存,消除对复合请求的需求(我认为这是一种技巧,尽管有时是必要的)非常有用。

为了帮助推进这个想法,我编写Internet Draft,以使API客户端告诉服务器他们希望推送哪些资源,我构建了具有一流,深度集成的Push支持并添加了支持的Node.js框架。为Prefer-PushKetting。…

        

前后端分离实践(一)

前言

最近这一段时间由于Nodejs的逐渐成熟和日趋稳定,越来越多的公司中的前端团队开始尝试使用Nodejs来练一下手,尝一尝鲜。

一般的做法都是将原本属于后端的一部分相对于业务不是很重要的功能迁移到Nodejs上面来,也有一些公司将NodeJS作为前后端分离的一个解决方案去施行。而像淘宝网这类的大型网站也很早的完成了前后端的分离,给我们这样的后来者提供了宝贵的经验。

同样,我们的大网盘团队也早在去年早早就开始了紧锣密布的准备工作,这目前工作也做的差不多了,现在我就来总结一下在过程中遇到的坑点以及注意事项。…

如何设计一个牛逼的API接口

在日常开发中,总会接触到各种接口。前后端数据传输接口,第三方业务平台接口。一个平台的前后端数据传输接口一般都会在内网环境下通信,而且会使用安全框架,所以安全性可以得到很好的保护。这篇文章重点讨论一下提供给第三方平台的业务接口应当如何设计?我们应该考虑哪些问题?…

    

一文搞懂后台高性能服务器设计的常见套路, BAT 高频面试系列

前言

金九银十,又是一年校招季。

经历过,才深知不易。最近,和作为校招面试官的同事聊了聊,问他们是如何去考察一个学生的,我简单归为以下几点:

  1. 聪明、反应快,这点自不必说,聪明意味着学习能力、适应力强,能够快速胜任工作。
  2. 算法不错,代码基本功好,这点其实考察的是算法能力和代码是否写得优雅。
  3. 基础过硬,技术岗面试最核心的还是考察「技术储备」,包括了语言基本功,操作系统、网络、体系结构、系统设计。
  4. 语言组织和表达能力,这点很重要,很多同学懂得某个知识点,却很难用简洁准确的语言表述出来。
    

软件架构编年史

原文:https://herbertograca.com/2017/07/03/the-software-architecture-chronicles/

译者:最早看到的是作者的这篇文章(译文),其中的那副信息图可谓集软件架构之大成。后来发现这是作者学习和思考软件架构发展史的系列文章之一。“以史为鉴,可以知兴替”,阅读历史就是学习的过程。翻译也不例外,我也是通过阅读和翻译来学习软件开发的历史,联系作者获得授权之后便有了这一系列译文。

这是软件架构系列的第一篇文章。我将我对软件架构的学习过程和思考以及我是如何运用这些知识的写成这一系列文章。

我把这一系列文章称为“软件架构编年史”,并不是因为我觉得自己的文笔不错,而是想用一种有趣的方式旧调重弹!😀

Redis从入门到实践

花了一周左右,全面的学习redis的知识,并记录学习笔记

原文请访问我的技术博客番茄技术小栈

redis初识

导学

盛赞redis

  • 高性能key-value服务器
  • 多种数据结构
  • 丰富的功能
  • 高可用的分布式支持

redis初识

定义

Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库

特性

  • 开源
  • 多种数据结构
  • 基于键值的存储服务系统
  • 高性能,功能服务

redis的前世今生

paste image