PHP在服务化微服务中遇到的问题

项目大了后服务化是必然的!
想象下几十个PHP项目,里面有大多数项目有同样的功能需求,我们可以用复制代码解决
但是对代码维护来说简直是噩梦,一次调整,调整多个项目,简直爽歪歪
先谈服务化拆分,再谈用微服务落地。 做好服务化是目的,用微服务落地是实现方式
那么微服务落地需要一大堆的服务治理能力来支撑,服务注册发现,断路器,网关,RPC等等
微服务中服务注册发现,总不可能手动管理各种服务,那么得有服务注册发现这个东西
由于apache php ,PHP-FPM php不是常驻内存的方式运行,导致了在服务注册发现等方便不能做,服务注册发现又是基础
正因为这个特性让PHP在虚拟主机年代大放异彩,也是因为本身特性导致PHP在服务化,微服务领域落地困难,不过就没解决办法了? 办法是有,但是小公司玩不起来。下面看看市面上的解决方案。

目前用PHP做微服务的解决方案

要用PHP做微服务必须要搞定微服务的服务注册发现问题

Agent模式

微博采用了这样的方式,在跑PHP-FPM的机器上跑了一个Agent(这个和后面会讲到的Service Mesh的 Sidecar模式很像)
通过Agent去完成服务注册发现,调用方通过Agent去调用。Agent作为一个包裹层。
Agent其实是后面在Service Mesh节提到的Sidecar的雏形。

以Swoole为基础的常驻内存damon模式

Swoole是PHP的一个扩展
使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。
基于Swoole开发的php程序是直接常驻内存damon的方式运行的
所以这样就可以方便的做服务注册和发现了
基于Swoole体系的开源PHP微服务框架有
Swoft
PHP-MSF
GroupCo
SwooleDistributed
Tencent/Tars

综述PHP微服务落地

综上述
方式1 以微博为代表的Agent代理模式(php-fpm模式运行的php程序因为运行机制问题,导致只有Agent的模式才能做服务注册发现,极少公司有这个技术支撑)
方式2 以Swoole为基石的常驻内存damon模式
生产可用问题,没有广泛的使用经验,目前有部分有强力技术支持的公司在运用,如果要用于自己的环境需要有技术团队去完成这个落地,需要开发一些配套的管控基础设施
毕竟没有服务治理能力贸然上微服务就是自己搞死自己的事

未来PHP做微服务的解决方案

Java体系以 Spring Cloud、Dubbo为代表的微服务框架得到广泛应用的时候无疑是对java编程语言的助推加持
现有的微服务框架不是就完美了,任何事物都是具备两面性的,现有的框架面临SDK更新,业务代码侵入,编程语言绑定(要做非常多的SDK)等诸多问题

Linkerd横空出世,提出了一个叫做Service Mesh的东西中文翻译叫做服务网格
随后以Google Ibm联合起来紧跟着发起了Istio项目
Service Mesh是一个非常新的概念,在2017年才提出,被誉为下一代微服务框架
试图解决现在的微服务框架的诸多问题,最终实现包含现有框架的所有功能,而且还能实现业务代码零侵入

Service Mesh使用了Sidecar模式接管了网络,所以才能实现业务代码零侵入
正因为Service Mesh的这样的架构设计,所以可以真正的实现编程语言无关性,不同服务可以使用不同的编程语言,不需要为不同的语言每个都去维护SDK

那么用PHP做的服务,不论是apache php ,PHP-FPM php, 还是Swoole damon都可以,可以做到真正的语言无关,应用程序本身是不关心微服务那一堆事情的

目前Service Mesh还存在的问题
体系还是非常早期的阶段,以Istio为例,目前大部分特性都是处在Alpha阶段(https://istio.io/about/feature-stages.html)
性能损失问题,据网上看到的测试Istio目前的版本有40%的性能损失(我觉得这个不是重点,只看字面40%,想象下实际业务场景呢? 解决的问题的收益远大于问题,况且后期肯定有优化的空间)
可能需要K8s才能更好的落地,以Istio为例虽然不强制依赖k8s,但是在k8s运行Istio才是最佳选择,使用k8s也是需要学习成本的(我觉得用k8s不是问题,中小公司可以用云平台直接提供的k8s能力,大公司也不用担心没人运维k8s的问题)
Service Mesh到规模落地时间可能还有2年左右的时间

业务代码开发为什么要关注服务治理的东西,微服务的东西? 这就是抽象成一层框架干的事情

作为phper未来还有机会么

诚然PHP在微服务时代被沦为了“前端”语言,写PHP的在大公司沦为“套模板”的。
在Java Spring Cloud 全家桶面前,phper是看着人家的工具库牛逼。
phper是否没机会了呢,php是否没机会了呢
仅仅是从语言角度讲,首先phper当然有机会,php也当然有机会,phper不要局限在php语言本身,js框架vue,Golang都是可以学习的目标
再次市面上还有大量的web站点只需要php就可以快速简单的达成,根本不需要服务化,什么微服务,老夫拿起php连上redis、mysql就是干,单体应用分分钟出活
phper不用担心没出路,php在web领域的优势、市场需求都会验证这一点

需要2年时间,Service Mesh在中大型公司一定会落地,小公司也会在云平台上找到落地的可能,php一样可以干微服务“后端”干的事!

Teleport

Gravitational Teleport官网

Gravitational Teleport开源代码

Gravitational Teleport 是一个现代化的ssh系统,用于管理Linux服务器集群中的私有访问。
特点在完善的授权管理。
通过在各个独立的防火墙内部署群集,然后再配置这些群集的可信任,可以跨防火墙(NAT)控制Linux终端
免费,开源
可用于多台Linux服务器管理

Teleconsole

Teleconsole官网

Teleconsole开源代码

Teleconsole可以把SSH终端会话分享成一个URL网址,打开这个网址就可以操作SSH终端会话了,SSH终端能上网就能分享
免费,开源,和朋友分享协助比较实用

Teleconsole is a free service to share your terminal session with people you trust. Your friends can join via a command line via SSH or via their browser over HTTPS. Use this to ask for help or to connect to your own devices sitting behind NAT.
You can also forward local TCP ports to your friends. Use this feature to allow them access the web applications running on your localhost when you are behind NAT.

rtty

rtty
根据您的终端的macaddr,通过Web访问您的处在NAT或防火墙里面的终端。
rtty非常适合远程维护你的或者你公司的部署在全球各地的成千上万的Linux设备。

GoTTY

GoTTY官网

GoTTY 分享你的终端成WEB 应用
GoTTY – Share your terminal as a web application

TeamView

TeamView官网
老牌可内网穿透的的远程协助,面向桌面,免费可用

AnyDesk

AnyDesk官网
Windows可用,面向桌面,免费可用

向日葵

向日葵官网
国产知名远程控制软件,面向桌面,收费

RDP 3389

直连模式,微软自带

VNC

直连模式,VNC

guacamole

https://guacamole.apache.org/

webvirtmgr

https://github.com/retspen/webvirtmgr

前言

Hive有多种Hive客户端工具
Hive命令行工具只适合执行已经编写好的HSQL语句,或者执行较为简单的HSQL语句
在编写开发HSQL语句的时候,是需要一个好用的GUI可视化工具的
那么GUI可视化的Hive HSQL编写工具下面列举了常见的几种方式

Cli命令行客户端 hive

hive本身的Cli命令行 键入 hive后使用

Ambari套件中的 Hive View 2.0

使用 Ambari 作为Hadoop管理套件的可以使用 Hive View 2.0 作为 hive的gui客户端工具使用
目前缺点无自动补全

Hue套件中的

Hue是一个大数据Hadoop管理套件
里面提供Hive WEB GUI
目前缺点 需要做一些配置调整,某些HSQL在Hive cli可以执行,但是在 WEB GUI中不能执行

DbVisualizer 数据库管理工具

DbVisualizer本身是一个数据库管理工具,只要有JDBC Driver支持,他就支持这款数据库
市面上常见的数据库都支持
配置了 Hadoop Hive的 JDBC Driver后,可以作为客户端工具使用
共需要2个文件,在Hadoop和Hive的安装包中,找到对应版本的hive-jdbc--standalone.jar hadoop-common-.jar

HIVE_HOME/lib/hive-jdbc-*-standalone.jar
HADOOP_HOME/share/hadoop/common/hadoop-common-*.jar

放到DbVisualizer\jdbc\hive 中

Linux性能测试UnixBench一键脚本

作者 https://teddysun.com/245.html

UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能。
Unixbench的主要测试项目有:系统调用、读写、进程、图形化测试、2D、3D、管道、运算、C库等系统基准性能提供测试数据。

最新版本UnixBench5.1.3,包含system和graphic测试,如果你需要测试graphic,
则需要修改Makefile,不要注释掉”GRAPHIC_TESTS = defined”,同时需要系统提供x11perf命令gl_glibs库。
下面的脚本使用了最新版UnixBench5.1.3来测试,注释了关于graphic的测试项
(大多数VPS都是没有显卡或者是集显,所以图像性能无需测试),运行10-30分钟后(根据CPU内核数量,运算时间不等)得出分数,越高越好。


测试方法:

wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh
chmod +x unixbench.sh
./unixbench.sh

一键测试脚本bench.sh

作者 https://teddysun.com/444.html

使用方法:
命令1:

wget -qO- bench.sh | bash
或者

curl -Lso- bench.sh | bash
命令2:

wget -qO- 86.re/bench.sh | bash
或者

curl -so- 86.re/bench.sh | bash
备注:
bench.sh 既是脚本名,同时又是域名。所以不要怀疑我写错了或者你看错了。

下载地址:
https://github.com/teddysun/across/blob/master/bench.sh

## bench-sh-2

https://github.com/hidden-refuge/bench-sh-2


bench-sh-2 Benchmark Script Version 2 Demo Output: http://pastebin.com/zqtBpZDU Parameters Help Page: ./bench.sh -h System Info + Speedtest IPv4 + Drive Speed: ./bench.sh Classic mode. This will use 1 GB bandwidth! System Info + Speedtest IPv6 + Drive Speed: ./bench.sh -6 IPv6 only speed test. This will use 1 GB bandwidth! System Info + Speedtest IPv4 & IPv6 + Drive Speed: ./bench.sh -46 or ./bench.sh -64 Dual stack speed test. This will use 2 GB bandwidth! System Info: ./bench.sh -sys System information only. Drive Speed: ./bench.sh -io Drive speed test via DD only. System Info + Speedtest IPv4 + Drive Speed + System Benchmark: ./bench.sh -b Classic mode with system benchmark. This will use 1 GB bandwidth! System Info + Speedtest IPv6 + Drive Speed + System Benchmark: ./bench.sh -b6 IPv6 only speed test with system benchmark. This will use 1 GB bandwidth! System Info + Speedtest IPv4 & IPv6 + Drive Speed + System Benchmark: ./bench.sh -b46 or ./bench.sh -b64 Dual stack speed test with system benchmark. This will use 2 GB bandwidth.