技术方案评审

article/2025/9/21 23:10:41

from: http://www.infoq.com/cn/news/2012/02/MapReducePatterns


新年开始,大部分公司都在启动大量新功能的规划及设计、技术人员同时在设计对应实现方案、架构师或者技术主管则需要一天内穿梭在多个技术讨论中,评审并达成成熟稳定的设计方案。从架构师的角度来考虑,如何衡量一个技术方案的优劣呢?

一、评审点

从总体上讲,技术方案是衡量一个团队的开发成熟度重要一方面。技术设计是否围绕核心需求key features?模块依赖关系、兼容性是否得到充分清晰的描述及共识;设计上不同的方案是否得到了充分考虑比较?是否有正反的激烈的碰撞还是行政上的领导说了算?另外代码实现是否正确执行设计,还是代码实现边走边看,与设计方案基本脱节?

从细节上来看,在软件企业内经常有不同形式的方案review,架构师在做review时候需要要考察哪些环节?从互联网系统设计的角度,总结到以下几点。

简洁及可维护性
从工程角度来看,避免难懂的方案。技术方案尽量象PPT那样,越傻瓜的方案越有生命力。当然简洁的同时也要满足后续条件。

性能、健壮性及可扩展性
互联网项目唯快不破,性能是立根之本。我们需要为健壮及性能留有一定扩展余地。

避免过度设计
Donald Knuth说过“过早优化是万恶之源(premature optimization is the root of all evil)”,不少架构师也牢记于心。但是在实际操作上,这一点和上一点所说扩展性直接冲突,比如
保守派:质疑在一些环节增加可扩展性,需要多花很多精力(比如30%),但增加的扩展能力未必能用上。
激进派:质疑如果不增加一定扩展能力,当需求稍微发生变化,方案需要全盘推翻。
可扩展性及过度设计的矛盾是否如薛定谔的猫那样,需要打开盒子那一刻才知道结果?还是架构师可以根据经验及环境去取舍,从我的观点来看,“make appropriate design tradeoff”是衡量架构师能力的首要指标。

Case Study
拿年前比较热门的12306系统来举例,如需做一个方案实现其中的余票查询模块,假设设计如下

12306查询模块设计方案

需求
1、能够承载峰值查询为10万次/秒的请求
2、余票信息能容忍一定程度和实际系统不一致,但是滞后不能超过5秒
附加需求:为了此虚拟项目更具有可比性及易于理解,设计方案必须全采用开源技术实现,不修改相关服务器源码,并采用普通廉价服务器部署。

技术难点
1、峰值处理能力,需要用最小的成本解决
2、数据需要5秒内动态更新的问题,需要采用合适的方案

技术选型
采用nginx, MySQL, varnish, memcached来实现
假设nginx+远程cache处理能力是2万次/秒;varnish在大部分本地cache命中情况下处理能力是3万次/秒;

方案一
采用cache直接查询的方式

方案二
采用七层反向代理增加cache的方式

数据更新的方案设计
需要将订票系统中的实时变化反映到查询系统中
方案一:PULL

方案二:PUSH

使用上面的方案评审方法来看,方案有什么问题呢?

二、方案文档

另外再说下技术方案的文档要求。一个团队如果没有形成技术方案的规范,交付的方案通常是五花八门的,有word、visio、邮件,mm图、ppt、PDF、纯文本…… 怎样才算一份好的设计文档?

核心需求及技术难点
很多技术方案第一段就直奔主题,比如展示模块图或者存储结构,这会让阅读者一头雾水,先告诉阅读对象“我们究竟要解决什么技术问题”。


一张A4纸上密密麻麻写满同一字号文字的方案令人生畏,“一图胜千言”,用txt、一封邮件、或者纯文字的word通常情况下较难得到理解

文字、关键字
方便本地或者文档服务器全文检索,文档支持版本管理。
一个团队运作一年以上之后,文档数可能成百上千,需要通过关键字来快速查询,需要支持版本管理的文档服务器及仓库。而仅靠设计方发一封邮件来提供给大家技术方案很难形成技术积累。

便于修改
技术方案及设计文档需要方便团队每一个成员更新,技术方案在代码实现时会有设计的改进及微调,这些需要能随时方便的更新到设计文档上,大部分团队存在设计文档与代码实现脱节的情况。而用一个图片或者pdf的来提供技术方案的更是让执行人员更新方案无处下手。

三、扩展作业

在文章结束之前,顺便再出一个今天随便想到的facebook中的like功能作为扩展训练题

需求

  • 可以对一个对象(一条feed、文章、或者url)进行like操作
  • 需要看到一个对象的like总数
  • 可以看到一个对象的like用户列表,优先显示我的好友列表(social list)。
  • 数据量:每天新增的like对象数为1千万,每秒like计数器查询量及social user list均为30万次/秒。

假设现有系统的存储结构(MySQL)为
friends表, from_uid + to_uid 为联合主键
(from_uid bigint,
to_uid bigint,
ctime timestamp)
feed表, feed_id + like_uid 为联合主键
(feed_id bigint,
like_uid bigint,
ctime timestamp);

假设以上存储是单表结构,请问如何设计like技术方案?如何评判你的like方案的优劣?



http://chatgpt.dhexx.cn/article/wOMxKPDA.shtml

相关文章

图形评审技术(GERT)与计划评审技术(PERT)

什么是PERT网络分析? PERT(Program Evaluation and Review Technique) 即计划评审技术,最早是由美国海军在计划和控制北极星导弹的研制时发展起来的。PERT技术使原先估计的、研制北极星潜艇的时间缩短了两年。 简单地说,PERT是利用网络分析制定计划以…

计划评审技术(PERT)求工期、标准差、方差以及概率

转自http://www.cnitpm.com/pm/5964.html 计划评审技术(PERT)。PERT 使用 3 种估算值来界定活动持续时间的近似区间: 最可能时间(Tm)。基于最可能获得的资源、最可能取得的资源生产率、对资源可用时间的现实预计、资…

计划评审技术

计划评审技术就是把工程项目当成一种系统,用网络图或者表格或者矩阵来表示各项具体工作的先后顺序和相互关系,以时间为中心,找出从开工到完工所需要时间的最长路线,并围绕关键路线对对系统进行统筹规划,合理安排以及对…

第22篇 项目进度管理__计划评审技术__重点内容

本文是项目进度管理的重点, 必须掌握 计划评审技术(Program Evaluation and Review Technique , PERT), 又称为三点估算技术。其理论基础是假设项目持续时间, 以及整个项目完成时间是随机的,且服从某种概率分布。 计划评审技术可以估计整…

DIY OpenTX Lite V1.0 先进的开源航模遥控器控制板!

OpenTX Lite V1.0 3D view! 喜欢他们的3D的板子设计挺好看!走线工整精美! 1、采用开源OpenTX软件编译修改OLED显示屏!OLED显示效果虽然没VFD好,但是这个效果我也买单!赞赞赞! 不晒meit美图了,晒…

开源STM32主控遥控器XBOX外形PCB

本人为了遥控自己的迷你空心杯六轴,于是从硬件到软件花了两周的时间,设计了个酷似X-box摇杆的遥控器,功能很多,如果有兴趣还可以自己写代码当游戏手柄用,大家自行探索。 主控用采用STM32f103c8t6,性能足够&…

ImportError: libgflags.so.2: cannot open shared object file: No such file or directory

近日在TX2上部署深度学习环境Pytorch, 按照github上的教程进行安装,在终端显示已经成功安装,可是在python3环境下导入torch时出现以下的错误. 上图提示找不到 libgflags.so.2 这个链接库, 无法导入. 于是我们进入 /usr/local/lib 目录下, 发现在该目录下没有 libgflags.so.2 .那…

Docker 使用 OpenvSwitch 网桥

Docker 默认使用的是 Linux 自带的网桥实现,实际上,OpenvSwitch 项目作为一个成熟的虚拟交换机实现,具备更丰富的功能。个人认为,将来 Docker 必然会支持 OpenvSwitch 作为其默认网桥实现。有兴趣的同学欢迎通过如下的步骤来尝鲜。…

OpenvSwitch完全使用手册

OpenvSwitch完全使用手册(一)-总览Overview 本文主要参考Overview of functionality and components以及Frequently Asked Questions以及结合自己的理解。 1 什么是OpenvSwitch OpenvSwitch,简称OVS是一个虚拟交换软件,主要用于虚拟机VM环境,…

iOS远程真机之wdaproxy使用指南

基于 WebDriverAgent 的 iOS 远程控制 WebDriverAgent 安装使用完全指南 一、命令行启动wdaproxy 在浏览器打开http://localhost:8100 问题:WDA未启动 WDA安装依赖报错:

openxxx

环境规划 主机名内网ip外网ip网卡模式角色yfm20172.16.10.190192.168.199.122NAT、LANOpenxxxx-Serveryfm22172.16.10.191LAN内网机器1yfm21192.168.199.121NATOpenxxxx-Clientwindows192.168.0.106WIFIOpenxxxx-Client 软件版本 Linux 安装:openxxxx-2.4.10.tar…

windows 下vscode+platformio开发stm32f103c8t6最小系统

最近想要写个更新航模接收机固件的小项目,移植opentx项目的部分代码到我的最小系统板上。不经意间发现vscode上也可以开发stm32了,于是,一个填坑行动开始了!!! 先写怎么才能编译调试吧! 环境&a…

Open vSwitch详解

1. Open vSwitch简介 Open vSwitch(简称OVS)是在开源的Apache2.0许可下的产品级质量的多层虚拟交换标准。它旨在通过编程扩展,使庞大的网络自动化(配置、管理、维护),同时还支持标准的管理接口和协议。总的来说,它被设计为支持分布在多个物理服务器。OVS适用于VM环境中提…

英伟达Nvidia TX1 TX2 串口通信方法

Nvidia TX1 TX2 串口通信方法 英伟达TX2串口串口硬件板子串口描述硬件连接方式测试工具及方法c通信代码 英伟达TX2串口 使用英伟达嵌入式板进行 串口通信 。 串口硬件 串口位置为下图中红色方框位置,标示UARTQ20和J17。 板子串口描述 串口共6个引脚&#xff0…

Open vSwitch

1 OpenVSwitch 1.1 简介 OpenvSwitch简称OVS,是一个高质量的、多层虚拟交换机,使用开源Apache2.0许可协议,由Nicira Networks开发,主要实现代码为可移植的C代码。它的目的是让大规模网络自动化可以通过编程扩展,同时仍然支持标准的管理接口…

TX12 + ExpressLRS 915MHz RC控制链路配置及问题汇总

TX12 ExpressLRS 915MHz RC控制链路配置及问题汇总 1. 硬件配置1.1 TX12遥控器1.2 发射/接受机 2. 问题汇总2.1 ELRS接收机无法点亮(第一次)2.2 ELRS接收机无法点亮(第二次)2.3 触发EdgeTX固件更新2.4 elrsV2.lua脚本执行失败2.5 ELRS发射机和接收机如何对频2.6 ELRS接收机LED…

DIY基于树莓派的OpenTX航模遥控器(一)

【前言】 在正式讨论OpenTX遥控器之前,先罗列一下自己以往DIY遥控器的经历,正是通过这些不断摸索逐步积累了DIY的经验,以及大部分的驱动代码。基于对Python的热爱,所有制作都是基于Python编程的,虽然对于实时运行系统…

stm32f429 pcb 原理图工程文件 OPENTX遥控器可用

stm32f429 pcb 原理图工程文件 OPENTX遥控器可用。拍下只发stm32f429 pcb工程文件。id664624938682&

基于opentx开源软件,DIY属于自己的uav遥控器

硬件方面:开关,自稳按钮,方向控制遥感,油门遥感,一键降落按钮, 1.根据开源源码找到引脚对应功能,以及实际各模块,按钮等,进行原理图的绘制,出个初板 2…

EdgeTX/OpenTX逻辑开关教程

目录 一、介绍 二、Taranis遥控的逻辑开关屏幕示例 三、Companion软件中的逻辑开关界面 四、开关功能 一、介绍 如果是T-Pro也可先学习本文的逻辑开关原理,这样在进行双击解锁/长按上锁的设置就得心应手了。 ⼿动激活开关标记为 SA 到 SH。在本文示例中SF 是两…