C++ 全栈知识体系C++ 全栈知识体系
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
✿导航
  • 基础
  • 函数
  • 知识点
  • IO框架
  • 新版本特性
  • 数据库原理
  • SQL语言
  • SQL - MySQL
  • NoSQL - Redis
  • NoSQL - ElasticSearch
  • 算法基础
  • 常见算法
  • 领域算法
  • 分布式算法
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • 计算机组成
  • 开发
  • 测试
  • 架构基础
  • 分布式系统
  • 微服务
  • 中间件
  • 概念
  • 理论
  • 架构设计原则
  • 设计模式
  • 协议
  • 技术选型
  • 编码规范
  • 流水线构建 - CI/CD
  • 知识点 - Linux
  • 网站 - Nginx
  • 容器化 - Docker
  • 容器编排 - Kubernetes
  • 服务网格 - Service Mesh Istio
  • 常用快捷键 - Shortcut
  • 工具使用 - Tools
  • 开源项目
  • 学习项目
  • 个人项目
  • 项目开发
  • 项目Idea
  • 并发
  • 部署
  • 分布式
  • 知识
  • 问题
  • 编程语言与技术
  • 系统与架构
  • 软件开发实践
  • 数据处理与应用设计
  • 个人
  • 产品
  • 团队
  • 知识体系
  • Vue
关于
  • 开源项目

    • libco

      • libco - 协程学习
    • ButtonRPC

      • ButtonRPC - rpc基础
      • ButtonRPC - 框架解析
      • ButtonRPC - 编程实现
    • Tars

      • Tars - 简介
      • Tars - 框架学习
      • Tars - Cpp开发
      • Tars - Go开发
      • Tars - Docker部署
      • Tars - Gateway部署
  • 学习项目

    • hmdp(Redis实战项目)

      • hmdp - 概览
      • hmdp - 短信登录
      • hmdp - 商户查询缓存
      • hmdp - 秒杀优化
      • hmdp - 分布式锁
      • hmdp - Redission
      • hmdp - Redis消息队列
      • hmdp - 优惠卷秒杀
      • hmdp - 附近商户
      • hmdp - UV统计
      • hmdp - 用户签到
      • hmdp - 好友关注
      • hmdp - 达人探店
    • SSM(Spring+SpringMVC+MyBatis)

      • SSM - Spring框架学习
      • SSM - IOC/DI配置管理第三方bean
      • SSM - Spring整合
      • SSM - SpringAOP
      • SSM - SpringMVC 基础
      • SSM - SpringMVC 应用
      • SSM - Maven高级
      • SSM - SpringBoot
      • SSM - MyBatisPlus
  • 个人项目

    • person - 概述
  • 项目开发

    • 项目开发 - C++开源项目推荐
    • 项目开发 - 整体开发流程
    • 项目开发 - 优化项目内容
    • 项目开发 - 注意事项
    • 项目开发 - 统一建模语言UML类图
  • Idea

    • Idea - 思维框架图
    • Idea - 常用技术检索
    • Idea - 小技巧tips
    • Idea - 编程中的tips

项目开发 - 如何优化项目

来自程序员鱼皮的优化项目经验分享。

  • 应该优化什么呢?

如何优化项目

最简单的优化项目方式就是新增功能,但是不能乱加,盲目堆砌新功能,可以问自己几个问题

  1. 这个功能是否符合自己项目的定位?
  2. 用户是否真的需要?
  3. 功能的实现能否给项目增加亮点?

个人的建议是完善现有的功能,把功能做到更好。

举个例子: 是否可以提高帖子搜索功能的灵活性、列举热搜、给出搜索建议等,这可能就会激励你去学习 Elasticsearch等技术。

一段有亮点的项目经历绝对不能只写“用 xx 技术完成了 xx 功能”,而是要有起伏和递进,在完成某功能的基础上进一步优化。

应该优化什么呢?

可以从以下角度出发:

  1. 性能:页面加载速度、接口并发量(gps/tps)、接口响应时长等

    • 方法:缓存、并发编程、池化、异步、限流降级熔断、有损服务、CDN、数据压缩等
  2. 成本:节约系统资源,降低CPU/内存/磁盘空间/带宽占用、节省机器数等

    • 方法:人工分析删除、定期删除、低频存储、淘汰策略、数据压缩等
  3. 可用性:尽可能地提高系统对外提供服务的时长,即提高 SLA(3~5个9的高可用,服务等级协议,全称:service level agreement)

    • 方法:集群、主备、自动故障恢复、监控告警、容灾
  4. 可靠性:尽可能地让系统提供可靠的服务,不要出现崩溃中断

    • 方法:集群、主备、异常处理、降级、容灾

关于可靠性和可用性的区别:https://bloq.csdn.net/HermitSun/article/details/92164226

可用性被定义为系统的一个属性,它说明系统已准备好,马上就可以使用。换句话说,高度可用的系统在任何给定的时刻都能及时地工作。 可靠性是指系统可以无故障地持续运行,是一个持续的状态。与可用性相反,可靠性是根据时间段而不是任何时刻来进行定义的。 如果系统在每小时崩溃1ms,那么它的可用性就超过99.9999%,但是它还是高度不可靠。与之类似,如果一个系统从来不崩溃,但是每年要停机两星期,那么它是高度可靠的,但是可用性只有96%。

  1. 稳定性:接口响应/操作处理时长相对固定,成功率高,响应结果保持正常

    • 方法:保证每个服务节点状态正常、性能相当(不要有的机器好有的机器垃圾导致接口时快时慢);合理规划服务调用链路,不能过长;做好技术选型,避免使用不稳定的第三方依赖
  2. 容错性:部分节点(服务)出问题时,系统整体依然能够正常提供服务

    • 方法:集群、反向代理、故障转移
  3. 健壮性:系统不会因为部分异常而整体崩溃

    • 方法:异常处理、进程监控(如 supervisor)
  4. 系统复杂度:整个系统易于理解,而不是说前人离职、后人无法接手

    • 方法:软件开发原则、设计模式、系统架构设计(如微服务)、开发规范、工作流
  5. 可维护性:使整个系统结构清晰、利于维护,出了问题也能够快速排查

    • 方法:软件开发原则、设计模式、系统架构设计(如微服务)、开发规范、工作流、抽象复用(组件化模块化)
  6. 可扩展性:使整个系统能够轻松应对未来新增的重求及务增长,不会差一发而动全身

    • 方法:设计模式、架构设计、集群、分库分表、技术选型
  7. 可观测性:能够随时观察了解系统/服务的运行状态、并能快速发现故障和定位异常

    • 方法:系统埋点上报、监控告警(prometheus)、ELK日志收集、可视化分析(Grafana)
  8. 可伸缩性:系统根据负载情况动态增加或减少节点,从而能够应对流量高峰、并在空闲时节约成本

    • 方法:K8S+Docker 容器、云原生
  9. 用户体验:符合用户的使用习惯、提升用户对网站的满意度

    • 方法:网页性能优化、接口性能优化、懒加载、占位符、骨架屏、设备适配、浏览器兼容性、满意度调研(如NPS)
  10. 安全性:保证机器、服务、数据库、网络等不被恶意侵入和污染,保证数据和用户隐私的安全

    • 方法:参数校验、常用安全措施(防 XSS、CSRF、SQL注入等)、网络防护(反 DDOS)、反爬虫、限流、黑白名单、防火墙等
Last Updated:
Contributors: klc407073648
Prev
项目开发 - 整体开发流程
Next
项目开发 - 注意事项