Nginx专栏—什么是好设计

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 前言

前言
刚入职的时候,我觉得最大的挑战不是公司五花八门的技术名词,或者写代码,而是design。因为code是可以学习的,各种名词缩写公司也会给你时间去适应,但是系统设计,如果没有真实的生产经验,无论说什么,其实都是纸上谈兵。

其实作为新人入职,公司也不会让你马上就去架构一个系统,但是作为组里的一员,一定会参与到各种各样的设计讨论和会议中。而当参加这种讨论的时候,你知道怎么去提出质疑吗?怎么样和对方argue吗?如果想尽快升职,尽快可以自己独立开发项目,这种会议,从刚入职开始,就不要一言不发,什么都说不上来。今天的内容就是帮助你解决这个问题。


解决这个问题,我们首先要知道什么是一个好的设计。我的回答就是:
一个好的设计,一定是高性能,高可用,和安全的。

性能的四个指标

响应时间:指应用系统从发出请求开始,到收到最后响应数据所需要的时间。响应时间是系统最重要的性能指标,最直接地反映了系统的快慢。

并发数:指系统同时处理的请求数,这个数字反映了系统的负载特性。比如对于一个互联网应用来说,并发数就是同时提交请求的用户数目。

吞吐量:指单位时间内系统处理请求的数量,体现的是系统的处理能力。我们一般用TPS 是每秒事务数,或者 QPS,每秒的查询数来表示。吞吐量、响应时间和并发数这三个指标之间是有关联性的,响应时间越快,并发数越大,吞吐量也就越高。


系统指标:服务器或者操作系统性能的一些指标数据,比如内存和CPU的使用情况、磁盘和网络 I/O 等等。在程序部署之后,监控系统去监控这些系统指标,一旦资源利用率超过我们设置的最大额度的时候,就会发出警报。

有关性能的问题:
1预计负载多少?最大承载压力多少?
2TPS/QPS是多少?响应时间是多少?
3需要多少CPU/Memory才能达到预期性能?

建设性意见:
1缓存:通过缓存可以减少数据库的负载压力。
2集群:通过负载均衡的手段,将多种应用服务器构建成一个集群,共同提供服务,以提高系统整体的处理能力。
3消息队列:可以使系统不同应用和服务之间异步调用,不仅可以使请求发起方尽快的拿到响应,还有如果某个时段访问量特别高,可以相当于一个buffer,避免对系统过高的负载压力。


高可用的设计

可用性的指标业界常用几个9来表示。
下面是我在wikipedia上复制过来的表格。一般来说,2个9表示系统基本可用,3个9是较高可用,4个9 就可以算是高可用,5个9指极高的可用性。

image.png

故障级别:
一级故障:网站整体不可用
二级故障:网站访问不顺畅,核心功能不可用
三级故障:核心功能少数用户不可用
四级或以上故障

可用性的优化:

1. 负载均衡

2. 数据库的主从模式和主主模式

3. 限流

4. 日志

5. 监控和警报

开会灵魂五问:

负载均衡(load balancer)用了吗?
会不会出现单点故障(Single point of failure) ?
数据库怎么复制?(主从,主主)
高并发怎么办?限流(Rate limiter)了吗?
如何写日志,做监控,发警报?

安全的设计


安全类的话题专业性比较强,一般需要专业的安全行业知识,我这里只浅显地跟大家列举三种安全类问题。

  1. 网络攻击

常见的防护手段是在代码中加强请求消息的过滤和SQL参数绑定,以及加验证模块和防火墙。

  1. 信息加密

常见的加密方法有one way hashing,对称或者非对称加密。

  1. 信息过滤和反垃圾

常用的技术手段是贝叶斯分类算法和布隆过滤器。大家可以看我的第四讲专题讲解布隆过滤器。

开会灵魂三问:

敏感数据加密了吗?
有验证模块吗?
服务之间是SSL/TLS吗?

相关文章
|
6月前
|
存储 缓存 负载均衡
Nginx入门笔记
Nginx入门笔记
206 0
|
3月前
|
缓存 负载均衡 前端开发
前端必会的nginx知识点
【8月更文挑战第22天】前端必会的nginx知识点
81 0
|
负载均衡 Java 应用服务中间件
【Nginx】第一章 Nginx简介
【Nginx】第一章 Nginx简介
85 0
|
数据采集 缓存 负载均衡
Nginx 的学习与实战
Nginx是开源、高性能、高可靠的 Web 和反向代理服务器,能支持高达 50,000个并发连接数。Nginx 是一款轻量级的 Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,其特点是占有内存少,并发能力强。
78 2
|
负载均衡 应用服务中间件 nginx
Nginx学习笔记 基础知识
Nginx学习笔记 基础知识
|
存储 负载均衡 Java
Nginx - 前言篇
Nginx - 前言篇
127 0
Nginx - 前言篇
|
缓存 负载均衡 JavaScript
Nginx 从入门到实践,万字详解!(上)
最近越来越频繁地遇到需要配置反向代理的场景,在自己搭建博客的时候,也不可避免要用到 Nginx,所以这段时间集中学习了一下 Nginx,同时做了一些笔记,希望也可以帮助到大家~ 😜 这篇文章会在 CentOS 环境下安装和使用 Nginx,如果对 CentOS 基本操作还不太清楚的,可以先看看 <半小时搞会 CentOS 入门必备基础知识> 一文先做了解。 相信作为开发者,大家都知道 Nginx 的重要,废话不多说,一起来学习吧。
Nginx 从入门到实践,万字详解!(上)
|
缓存 前端开发 应用服务中间件
Nginx 从入门到实践,万字详解!(中)
最近越来越频繁地遇到需要配置反向代理的场景,在自己搭建博客的时候,也不可避免要用到 Nginx,所以这段时间集中学习了一下 Nginx,同时做了一些笔记,希望也可以帮助到大家~ 😜 这篇文章会在 CentOS 环境下安装和使用 Nginx,如果对 CentOS 基本操作还不太清楚的,可以先看看 <半小时搞会 CentOS 入门必备基础知识> 一文先做了解。 相信作为开发者,大家都知道 Nginx 的重要,废话不多说,一起来学习吧。
Nginx 从入门到实践,万字详解!(中)
|
缓存 移动开发 负载均衡
Nginx 从入门到实践,万字详解!(下)
最近越来越频繁地遇到需要配置反向代理的场景,在自己搭建博客的时候,也不可避免要用到 Nginx,所以这段时间集中学习了一下 Nginx,同时做了一些笔记,希望也可以帮助到大家~ 😜 这篇文章会在 CentOS 环境下安装和使用 Nginx,如果对 CentOS 基本操作还不太清楚的,可以先看看 <半小时搞会 CentOS 入门必备基础知识> 一文先做了解。 相信作为开发者,大家都知道 Nginx 的重要,废话不多说,一起来学习吧。
Nginx 从入门到实践,万字详解!(下)