概述

好久没有更新博客了,因为疫情的原因被集中隔离在集中隔离点,今天想整理一下最近学习的知识点,做一个小的节点总结,对工作和职业有控制力,就会多一点安全感。

我的职业目标以后向 性能优化侧重于解决问题的系统方案架构师。

编程语言

首先我先优化了一下自己的编程语言结构,编程语言更像是一个实现方案的工具,PHP擅长解决Web服务,Java属于编程语言中的坦克,偏向解决各种服务,以稳定著称,公司内部在研究Rust,我眼前也在研究Python。

下面是我准备学习的方向:

php -> 自研swoole框架 -> php扩展 -> 进而延伸到生产环境
rust -> 实现Brainfuck解释器 -> JIT编译器 -> Web开发(极客时间)
python -> 零基础学python(极客时间) -> 办公自动化(极客时间)
java -> 零基础学java -> socket编程(慕课网)
go -> 网关实战(慕课网)

上面都是我现阶段要学习的编程语言的学习目标,掌握了更多的工具,做起架构方案会更得心应手,做完的实践代码,存放在github里,做未来路上的基石。

现在市场上的架构师的开发语言主要集中在Java,Python,Go三大类,PHP里的Swoole的生态市场没有别打通,想想就有些遗憾,其实Swoole是一个很不错的扩展,协程,链接池,异步应有尽有。

编程语言是一个剑客的招式,学会了剑招,领略了真谛,最后才能成为一代宗师,无招胜有招。

编程语言的分类与执行过程

对于编译型语言,编译结果已经是针对当前CPU体系的指令;而解释型语言,需要先编译成中间代码,
再经由该解释型语言的特定虚拟机,翻译成特定CPU体系的指令被执行。

编译型语言的执行过程(以Rust为例):

1.Rust编写代码(cargo new)
2.将程序编译后转换成机器语言二进制文件(cargo build)
3.程序运行时,生成二进制文件副本
4.Cpu解释并执行内容

解释语言的执行过程(依赖于虚拟机,以PHP为例):

1.php代码
2.Zend虚拟机2.1 解释层(词法分析、语法分析)->Ast(抽象语法树)->编译器2.2 中间数据层(执行栈、opline指令、符号表)2.3 执行层(执行引擎)
3.Cpu解释并执行内容

数据类型

类型是对二进制数据的一种约束行为。类型比起二进制数据,有许多优势:

  • 减少开发者心智负担
  • 安全、容易优化

常见的类型分类:

  • 静态类型:在编译器对类型进行检查
  • 动态类型:在运行期对类型进行检查
  • 强类型:不允许隐式类型转换
  • 弱类型:允许隐式类型转换

高性能

高性能的两个重要的点:链接数量和请求数量 ,服务器的处理能力(TPS)。

听到的并发量高就会瑟瑟发抖,其实大可不必,比如一小时大概100w的链接数,那么一秒的链接数:

1000000 / 3600s = 277/tps

一个用户在 App中的各种操作如果需要请求15个接口,但并不是每一个用户都会完整地走完这 15 个接口。

277 * 15 = 18.46666666

经过计算,每秒的活跃用户为18个人,一个小时的活跃人数大概6w人左右,是不是就没有那么瞎人了,所有的高并发处理都是分而治之,分成小块处理的。

并发用户 = 最大TPS/单用户TPS
在线用户 = 并发用户/并发度

用户的高并发,归根结底的本质是对容量可承载大小的计算。

高性能的实践

读写分离:开源数据库中间件方案:

  • MySQL Proxy
  • MySQL Router
  • Atlas (奇虎 360)

MySQL Router的主要功能有读写分离、故障自动切换、负载均衡、连接池等。

Atlas 是一个位于应用程序与 MySQL 之间中间件。在后端 DB 看来,Atlas 相当于连接它的客户端,在前端应用看来,Atlas 相当于一个 DB。Atlas 作为服务端与应用程序通信,它实现了 MySQL 的客户端和服务端协议,同时作为客户端与 MySQL 通信。它对应用程序屏蔽了 DB 的细节,同时为了降低 MySQL 负担,它还维护了连接池。

单服务器高性能模式:Reactor与Proactor

实现方案:

1.单 Reactor 单进程的方案:redis

需要注意的是,C 语言编写系统的一般使用单 Reactor 单进程,因为没有必要在进程中再创建线程;而 Java 语言编写的一般使用单 Reactor 单线程,因为 Java 虚拟机是一个进程,虚拟机中有很多线程,业务线程只是其中的一个线程而已。

  1. 单 Reactor 多线程

没有列出“单 Reactor 多进程”方案,这是什么原因呢?主要原因在于如果采用多进程,子进程完成业务处理后,将结果返回给父进程,并通知父进程发送给哪个 client,这是很麻烦的事情。因为父进程只是通过 Reactor 监听各个连接上的事件然后进行分配,子进程与父进程通信时并不是一个连接。如果要将父进程和子进程之间的通信模拟为一个连接,并加入 Reactor 进行监听,则是比较复杂的。而采用多线程时,因为多线程是共享数据的,因此线程间通信是非常方便的。虽然要额外考虑线程间共享数据时的同步问题,但这个复杂度比进程间通信的复杂度要低很多。

  1. 多 Reactor 多进程 / 线程

目前著名的开源系统 Nginx 采用的是多 Reactor 多进程,采用多 Reactor 多线程的实现有 Memcache 和 Netty。

Nginx 采用的是多 Reactor 多进程的模式,但方案与标准的多 Reactor 多进程有差异。具体差异表现为主进程中仅仅创建了监听端口,并没有创建 mainReactor 来“accept”连接,而是由子进程的 Reactor 来“accept”连接,通过锁来控制一次只有一个子进程进行“accept”,子进程“accept”新连接后就放到自己的 Reactor 进行处理,不会再分配给其他子进程。

致未来的路 - 思考、方向和实践相关推荐

  1. 观点 | 商汤科技联合创始人林达华:深度学习遭遇瓶颈,未来之路需要新的思考

    观点 | 商汤科技联合创始人林达华:深度学习遭遇瓶颈,未来之路需要新的思考 原创: 商汤科技 商汤SenseTime 今天 日前,由中国计算机学会(CCF).雷锋网.香港中文大学(深圳)联合举办的20 ...

  2. 「思考人生」未来的路该怎么走下去

    最近接收到身边很多信息,无形之中透露出一些东西,当静下心来的时候才发现,原来我已不再年少了.古语有云:三十而立.距离三十还剩几年时光,剩余不多了.目前还是孤单的一人独行.有时候常常会以男人没有一定的事 ...

  3. 未来电信业的发展方向 VOIP的中国之路

    来自:http://network.chinabyte.com/268/12276268.shtml VOIP网络电话,灰色地带掩盖下的"金矿" 近来,网络电话(VOIP)绝对是国 ...

  4. 深度 | 周明:自然语言处理的未来之路 | CCF-GAIR 2019

    https://www.toutiao.com/i6713385632942522891/ 2019-07-14 13:24:58 2012年至今,自然语言处理进入神经网络时代已经7年,未来发展之路朝 ...

  5. 实时音视频聊天中超低延迟架构的思考与技术实践

    1.前言 从直播在线上抓娃娃,不断变化的是玩法的创新,始终不变的是对超低延迟的苛求.实时架构是超低延迟的基石,如何在信源编码.信道编码和实时传输整个链条来构建实时架构?在实时架构的基础之上,如果通过优 ...

  6. 那些指责集度ROBO-01抄袭者,更应该学习它对未来汽车的思考

    出品 | 何玺 排版 | 叶媛 2021年3月2日,集度汽车注册成立. 2022年6月8日,在集度成立463天后,其首款汽车机器人概念车-ROBO-01正式发布. 全新的发布形式,不一样的设计,超前的 ...

  7. NLP未来,路在何方?12位巨佬联名指路!

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 文 | Sheryc_王苏 美 | xxr CMU.华盛顿大学.南加州大学.MIT.M ...

  8. 未来编程语言的发展方向(1)

    Windows操作系统一路走来历经数个版本,每个版本在给人们提供新的功能和使用体验的同时也给Windows平台的应用开发人员带来不同的挑战:在这个过程中,<Windows核心编程>一书从& ...

  9. 未来新一代计算机的发展方向,未来计算机的发展方向 (2)

    未来计算机的发展方向 世界在进步,技术在发展,计算机越来越强大.计算机正逐步渗透到生活的各个领域,世界正逐步进入到以信息产业为主导的新经济时代,互联网.移动电话.卫星网络的发展,对人类社会将产生巨大的 ...

最新文章

  1. word图片自动换行不亮_Word自动换行版式不变形
  2. python获取小时分钟
  3. 孤荷凌寒自学python第三十八天初识python的线程控制
  4. 使用Akka简化交易系统
  5. 视频会议十大开源编解码项目排行
  6. Silverlight安装相关问题
  7. epic打开一直闪_教你用意派Epub360做酷炫的快闪H5!(附快闪H5模板)
  8. linux查看硬件信息及驱动设备
  9. MSN网页上点击连接
  10. 干货满满,30个Python源代码!
  11. 学计算机的逻辑学博士,逻辑学博士点
  12. excel文档插入新列报错:为了防止数据丢失,excel不能从表中移走非空单元格。
  13. python的request返回400_爬虫发出ajax请求,requests能获取正常响应,scrapy发出请求却返回400...
  14. 思睿普信息IT技术服说明
  15. 微信 及支付宝 支付接口 功能
  16. rails网站分享到朋友圈功能是怎么实现的
  17. 唐山大地震:接近尸体
  18. 如何打造高颜值PPT——小鱼儿何艳老师ppt课-课堂笔记
  19. 使用 cocos creator 3.0 制作抽奖小游戏
  20. 第三章:电子商务平台选择2

热门文章

  1. leetcode104---求二叉树深度
  2. 核心交换机安全多业务高性能万兆交换机
  3. AR产品展示,AR增强现实技术,AR解决方案
  4. 又想起Solaris
  5. Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java11 的新特性
  6. 华为补助武汉员工,最高每日 2000 元;谷歌更新安卓修复数百万台芯片漏洞;Fuchsia OS进入开发者试用阶段 | EA周报...
  7. GRBL三:gcode代码解析
  8. DFS 图遍历路径优化分析
  9. 3、大话设计模式--浅谈基础
  10. 浅谈怎样提高百度空间排名(非原创)