IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP - 2021年终总结 -> 正文阅读

[PHP知识库]PHP - 2021年终总结

概述

技术领域没有银弹,各行各业的人想要持久的生存都需要学习,学习本身是一件有趣的事,难点在于把学到的知识融入到现在公司的业务和体系中,让项目落地,重新定义和改革之前的架构体系,这个过程是复杂的,新旧体系的交替,人员的流动等等,这个过程可能会遇到各种各样的问题,没有数据证明的项目落地都差那么点意思,不够精准和严谨,专业程度会遭到质疑。

2021年技术圈的变化:

1.centos7即将停止更新,2024年不在打补丁...
2.layUi下线官网,接入Vue开发模式 ...
3.PHP语言市场占有率排名下降了2位,2021排名第10,还有下降趋势...
4.容器(Docker)技术的成熟,微服务变成了一种主流...
5.市场Go语言编程者上升很明显...
...

不管什么年代,实力都是王中王,保持学习的习惯对一个手艺人尤为重要,持续学习和思考是职场人最珍贵的品质。

多想多思考,才能从根本上提高效率。有总结的能力、有宏观的角度、有兼顾细节的耐心。

编程语言

没有什么语言是最好的编程语言,语言只是语法和解决问题的侧重点不同,比如PHP就擅长Web领域,Go专门解决并发的问题,本质上没有什么不同,都是实现某一个业务(功能)的工具,实现的一种手段。

PHP

从初入职场至今,主要从事的就是PHP语言的编程开发,其他的学习都围绕着这条主线,从开始的基本编码、到扩展、编入第三方插件,由浅入深层层递进。

PHP语言虽然不及前几年那么火爆,但是还是有很强的生命力,简单高效,易扩展,开源,有强大的社区是语言生命力的保证。

Swoole

Swoole两个扩展是具有划线的两个扩展,和之前的扩展不同,它在启动时,预编译代码、启动线程池也加入了协程这个网络处理结构。常驻内存型的分布式 PHP 框架,专为 API 而生,摆脱传统 P运行模式在进程唤起和文件加载上带来的性能损失。

Hyperf 和Easyswoole是Swoole的扩展框架,我主要用的是Easyswoole,基于websocket做了一个消息推送服务。

Easyswoole专栏链接

后端存储

业务大体分为两种,一种主要是消耗计算力为主的CPU密集型,一种是主要消耗内存和缓存的I/O密集型业务,存储也分两种一种是关系型数据库,一种是内存型数据库,他们有着各自的优缺点。

Mysql

比如说执行一条Sql语句,要明白这条语句发生了什么,查询语句和更新语句有本质的不同。Mysql还有个不同的点在于,Sql语句的执行,很大程度又取决于存储引擎。

Mysql的存储结构是Betree结构,在每一层都有指针链接,由页和叶子节点按顺序存储,查询语句,是经过链接器、分析器、执行器和优化器,返回查询结果。更新语句更多的是依赖redoLog和Binlog日志来完成。

查询的语句使用explain测试,如果有不按预期执行的语句,检查配置文件,配置文件的参数,决定了后续的计算和算法。

InnoDb和Myisam的存储不同在于,Myisam索引存储的是物理地址,InnoDb存储的是实际数据,少了回表的执行过程。

Mysql的最大杀手是并发查询,在执行脚本任务的时候,最后可以加上主键的条件,Order by ID ASC 在加上一个 WHERE ID > ID 的条件。

如果链表的速度比较慢,可以把少的部分单独查询出来,做字典拼接处理,在我之前的博客里写的很清楚了,百万级数据查询优化笔记 有叙述具体的方法,在这就不赘述了。

Redis

Redis更像是一个被一个大的对象包裹的数据结构,支持丰富的数据结构,但是Redis是单线程,如果执行失败需及时释放。

Redis的计算方法依赖于配置的参数,字符串是一种算法,数字是一种算法,对不同的长度也有不同的算法。

要注意缓存的回收与一致性,这是一定会遇到的问题。

并发与性能

先说说我之前失败的一个例子,Http的请求量过大,直接打在Mysql上,开始还能反应过来,半个小时后,挤压的超时太多,直接把Mysql压垮了。复盘后我重新修改了接口逻辑加了两个小时的缓存,在过期时1-3000s随机过期,后来经过Jemeter压测得到了30/s的峰值。

主要通过容量预估和压力测试两个部分来说明这个点。

容量预估

容量预估的核心是计算,把峰值的QPS计算到具体的每秒多少,容量预估就是对Cpu、内存的精确计算预处理能力。就像物理学家通过模拟计算预测引力波、黑洞、等多种天文现象。

项目开始之前应该问相关同事的历史记录和情况,进行容量预估和方案设计。思路有时候比结果更重要。

压力测试

项目完成对项目进行压力测试主要是测试会不会因为高峰流量到来的情况,压力测试有两个关键的点,访问最优点和访问最大值,压力保持在最优点以下。还需要预留点伸缩空间。

容器和微服务

单机系统时代,最开始的互联网公司都使用单机系统就足矣满足用户的需求,随着互联网的高速发展,单一的系统不能满足场景的多样化需求,由单一系统逐渐演变成分布式系统。

容器的兴盛把微服务变成了一种可能,微服务主要是针对之前的分布式系统做的对比和区别,把单一的功能封闭在自己的范围内,加强了系统的稳定性,高效便捷、快速熔断的特点。

真正的微服务,最核心的其实是 如何做好服务间的最小粒度切分,其实这个 服务切分是属于架构规划上的范畴。

Docker容器

对于Docker进行了3次大规模的学习,掌握基本的原理和操作命令,Docker是很好用的工具,快速部署服务。

单独搭建部署应用服务Docker php安装扩展步骤详解Docker 环境下部署高可用集群实践
有说明和讲解。

其他总结

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1.程序设计时要充分考虑界值、是否存在、最大最小的情况,便于程序可控
2.跨协程调用的问题在于,生成野协程无法回收
3.编程编来编去都是数学
4.mysql并发连接和并发查询:并发连接数达到几千个影响并不大,就是多占一些内存而已。我们应该关注的是并发查询,因为并发查询太高才是 CPU 杀手。
5.CSP模型是用于描述两个独立的并发实体通过共享的通讯 channel(管道)进行通信的并发模型。 CSP中channel是第一类对象,它不关注发送消息的实体,而关注与发送消息时使用的channel。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1.高性能 就是最合理的使用了Cpu和缓存
2.微服务架构是一种思想,与实现语言无关,容器的隔离性给微服务带来了可能
3.容量预估是架构师的基本技能,是考计算出来的
4.RPC的本质是进程与进程之间的通信
5.TCP交互的本质是数据流的互动和传输
6.分库分表:掌握拆分方式是关键,理解拆分原理是内核
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

1.性能问题的本质,就是系统资源已经达到瓶颈,但请求的处理却还不够快,无法支撑更多的请求
2.进程的 PID 在变,这说明什么呢?在我看来,要么是这些进程在不停地重启,要么就是全新的进程
3.用我们最熟悉的 ps 或者 top ,可以查看进程的状态,这些状态包括运行(R)、空闲(I)、不可中断睡眠(D)、可中断睡眠(S)、僵尸(Z)以及暂停(T)等
4.最容易想到的应该是 CPU 使用率,这也是实际环境中最常见的一个性能指标。
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

JavaScript 中对象独有的特色是:对象具有高度的动态性,这是因为 JavaScript 赋予了使用者在运行时为对象添改状态和行为的能力。
线程是调度的基本单位,而进程则是资源拥有的基本单位。
经典的密码学算法:对称加密算法、非对称加密算法和散列算法。
“授权”和“访问控制”其实是同一个概念,都是允许或者禁止某个用户做某件事情。

未来

有个同事跟我说了一个很好的办法,就是看到代码时,在你大脑里运行一遍,看看是否存在非预期的结果,常常优化自己的老代码,获得新的进步。

对于每一个明天都属于未来,决定未来的是每一个现在。

Go

Go和Linux私房菜(服务器架设篇)是我2022年学习的重点,要严谨认真,要继续加油~

参考文档/课程

  • 参考Swoole/Easyswoole的官方文档
  • 架构解密
  • 深入浅出大型网站架构设计
  • 网络编程实战
  • 大型网站服务器容量规划
  • Mysq 45 讲(极客时间)
  • 高并发设计40讲(极客时间)
  • 代码整洁之道
  • Redis的设计与实现
  • 微服务设计
  • 后端存储实战课
  • web容量预估
  • 透视HTTP协议(极客时间)
  • Docker技术入门与实战(第三版)
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:45:21  更:2022-01-08 13:45:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 4:37:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计