DREAM OF TECHNICAL ACHIEVEMENT

0%

HTTP协议特点

  1. 支持客户/服务器模式。
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记。
  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
阅读全文 »

我们在做项目的时候,经常需要编写大量的PHP代码,有很多的方法以及变量,当项目进行到一定程度,代码越来越多,你会发现程序变慢,但有时我们不知道具体是哪块代码执行慢,或者哪个方法占用了太长的执行时间,这时我们就需要一个调试工具,来帮我们记录程序执行过程中的一些具体信息,包括类、方法名、执行时间、次数等信息,今天介绍的工具是xdebug以及他的结果分析展示工具kcachegrind。

XDEBUG安装

xdebug下载地址: https://xdebug.org/download.php

xdebug是在PHP安装包中内置的,具体路径是ext/php_xdebug.dll,由于内置,所以我们不需要重新安装,只需要修改配置文件php.ini来启用该库,打开php.ini文件,并查找修改以下配置信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[xdebug]

;基本调试配置
xdebug.auto_trace = on
xdebug.collect_params = on
xdebug.collect_return = on
xdebug.profiler_enable = on
;profilers 保存路径
xdebug.profiler_output_dir ="/php/ext/xdebug_profilers"
;traces 保存路径
xdebug.trace_output_dir = "/tmp/ext/xdebug_traces"

;远程调试设置
xdebug.remote_enable = on
xdebug.remote_host = localhost
xdebug.remote_port = 9010
xdebug.remote_autostart = on
;配置php_xdebug.dll的地址
zend_extension=php-5.6.27-nts\ext\php_xdebug.dll

阅读全文 »

Ngrok原理

随着互联网的发展,无论是web服务还是移动APP越来越多的都集成了第三方支付(支付宝、微信、银联)。通常作为服务提供方,支付成功以后都会有一个后端回调URL来通知是否调用者是否支付成功,这个URL必须是公网环境,并且可以被访问到。然而在实际开发测试环境中,我们一般都是在内网开发,所以说对于支付测试是一件比较麻烦的事情。

这时候,我们就需要内网穿透服务来解决第三方服务无法回调的问题了,下面我们来稍微盘点那些流行的内网穿透技术。

简介

ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。ngrok 可捕获和分析所有通道上的流量,便于后期分析和重放(百度百科)。

  • 优点:使用方便,Docker容器化,配置简单,各平台支持,也可以自己搭建服务器
  • 缺点:ngrok 是一个开源程序,官网服务在国外,国内访问国外速度慢。1.7+以后不再开源,收费才是持续发展的动力
阅读全文 »

Mysql

任何一种数据库中,都有各种各样的日志。MySQL也不例外,在Mysql中有5种不同的日志、分别错误日志、二进制日志、查询日志和慢查询日志。这些日志记录着Mysql数据库不同方面的踪迹。下文将介绍这4种不同的日志作用和用途。

MySQL日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;

日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。

错误日志

在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据文件中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。

阅读全文 »

Linux Inode

inode是一个重要概念,是理解Unix/Linux文件系统和硬盘储存的基础。
我觉得,理解inode,不仅有助于提高系统操作水平,还有助于体会Unix设计哲学,即如何把底层的复杂性抽象成一个简单概念,从而大大简化用户接口。

inode是什么?

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。

阅读全文 »

Linux

Linux 目录结构图

目录简介

目录 介绍
/ 根目录,位于Linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc、/bin、/dev、/lib、/sbin应该和根目录放置在一个分区中。
/bin,/usr/bin 该目录为命令文件目录,也称为二进制目录。包含了供系统管理员及普通用户使用的重要的linux命令和二进制(可执行)文件,包含shell解释器等。
/boot 该目录中存放系统的内核文件和引导装载程序文件,/boot/vmlinuz为linux的内核文件,以及/boot/gurb。建议单独分区,分区大小100M即可。
/dev 设备(device)文件目录,存放linux系统下的设备文件,访问该目录下某个文件,相当于访问某个设备,存放连接到计算机上的设备(终端、磁盘驱动器、光驱及网卡等)的对应文件,包括字符设备和块设备等,常用的是挂载光驱mount /dev/cdrom/mnt。
/etc 系统配置文件存放的目录,该目录存放系统的大部分配置文件和子目录,不建议在此目录下存放可执行文件,重要的配置文件有/etc/inittab、/etc/fstab、/etc/init.d、/etc/X11(X Window系统有关)、/etc/sysconfig(与网络有关)、/etc/xinetd.d修改配置文件之前记得备份。该目录下的文件由系统管理员来使用,普通用户对大部分文件有只读权限。
/home 系统默认的用户宿主目录,新增用户账号时,用户的宿主目录都存放在此目录下,~表示当前用户的宿主目录,~test表示用户test的宿主目录。建议单独分区,并设置较大的磁盘空间,方便用户存放数据。
/lib,/usr/lib,/usr/local/lib 系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助,该目录下存放了各种编程语言库。典型的linux系统包含了C、C++和FORTRAN语言的库文件。/lib目录下的库映像文件可以用来启动系统并执行一些命令,目录/lib/modules包含了可加载的内核模块,/lib目录存放了所有重要的库文件,其他的库文件则大部分存放在/usr/lib目录下。
/lost+fount 在EXT2或EXT3文件系统中,当系统意外崩溃或机器意外关机,产生的一些文件碎片放在这里。在系统启动的过程中fsck工具会检查这里,并修复已经损坏的文件系统。有时系统发生问题,有很多的文件被移到这个目录中,可能会用手工的方法来修复,或者移动文件到运来的位置上
/mnt,/media mnt目录主要用来临时挂载文件系统,为某些设备提供默认挂载点,如floppy,cdrom。这样当挂载了一个设备如光驱时,就可以通过访问目录/mnt/cdrom下的文件来访问相应的光驱上的文件了。
/opt 给主机额外安装软件所摆放的目录。如:FC4使用的Fedora 社群开发软件,如果想要自行安装新的KDE 桌面软件,可以将该软件安装在该目录下。以前的 Linux 系统中,习惯放置在 /usr/local 目录下。
/proc 此目录的数据都在内存中,如系统核心,外部设备,网络状态,由于数据都存放于内存中,所以不占用磁盘空间,比较重要的目录有/proc/cpuinfo、/proc/interrupts、/proc/dma、/proc/ioports、/proc/net/*等。
/root 系统管理员root的宿主目录,系统第一个启动的分区为/,所以最好将/root和/放置在一个分区下。
/sbin,/usr/sbin,/usr/local/sbin 放置系统管理员使用的可执行命令,如fdisk、shutdown、mount等。与/bin不同的是,这几个目录是给系统管理员root使用的命令,一般用户只能”查看”而不能设置和使用。
/tmp 一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
/srv 服务启动之后需要访问的数据目录,如www服务需要访问的网页数据存放在/srv/www内。
/usr 应用程序存放目录,/usr/bin 存放应用程序, /usr/share 存放共享数据,/usr/lib 存放不能直接运行的,却是许多程序运行所必需的一些函数库文件,/usr/local 存放软件升级包,/usr/share/doc 系统说明文件存放目录。
/usr/share/man 程序说明文件存放目录,使用 man ls时会查询/usr/share/man/man1/ls.1.gz的内容建议单独分区,设置较大的磁盘空间。
/var 放置系统执行过程中经常变化的文件,如随时更改的日志文件 /var/log。/var/log/message: 所有的登录文件存放目录。/var/spool/mail: 邮件存放的目录。 /var/run: 程序或服务启动后。建议单独分区,设置较大的磁盘空间。
/tmp 存放临时文件目录,一些命令和应用程序会用的到这个目录。该目录下的所有文件会被定时删除,以避免临时文件占满整个磁盘。
阅读全文 »

Kong

Kong可以说是API的得力助手。对需要从事API管理的广大开发员来说,它是最出色的工具之一。Kong是开源工具,具有可扩展性和模块性,可以在任何一种基础设施上运行。多年来,Kong一直在支持优秀的开发项目,比如Mashape(世界上规模最大的API市场)。最棒的是,Kong得到了强大的Nginx的支持。

主要功能

  • Kong可灵活扩展:只要增添更多的服务器实例,它就能横向扩展,毫无问题,那样你可以支持更多流量,同时确保网络延迟很短。

  • Kong可在任何地方运行:它可以部署在单个或多个数据中心环境的私有云或公有云上。它还支持大多数流行的操作系统,比如Linux、Mac和Windows。Kong包括许多实用技巧,以便针对大多数现代平台完成安装和配置工作。

  • Kong具有模块性:它可以与新的插件协同运行,扩展基本功能。可将你的API与许多不同的插件整合起来,以增强安全、分析、验证、日志及/或监测机制。最好的例子之一就是Nginx Plus插件(https://getkong.org/plugins/nginx-plus-monitoring/),该插件提供了服务器实时监测机制,以获得关于负载和请求的度量指标和统计数字。

  • 开源及企业:虽然Kong是开源工具,可供每个人免费使用,但你也能获得企业版,企业版通过电子邮件、电话和聊天提供了快速支持,此外还提供初始安装、从第三方API管理工具来迁移、紧急补丁、热修复程序及更多特性。
    Kong Api管理解决方案

阅读全文 »

最近公司业务要构建一个高性能API网关,所以就整理了市场上的一些产品。

API网关简介

API网关 顾名思义,是出现在系统边界上的一个面向API的、串行集中式的强管控服务,这里的边界是企业IT系统的边界,主要起到隔离外部访问与内部系统的作用。在微服务概念的流行之前,API网关的实体就已经诞生了,例如银行、证券等领域常见的前置机系统,它也是解决访问认证、报文转换、访问统计等问题的。移动应用、企业互联,使得后台服务支持的对象,从以前单一的Web应用,扩展到多种使用场景,且每种使用场景对后台服务的要求都不尽相同。这不仅增加了后台服务的响应量,还增加了后台服务的复杂性。随着微服务架构概念的提出,API网关成为了微服务架构的一个标配组件。

API网关网关的价值:

  • 网关层对外部和内部进行了隔离,保障了后台服务的安全性。
  • 对外访问控制由网络层面转换成了运维层面,减少变更的流程和错误成本
  • 减少客户端与服务的耦合,服务可以独立发展。通过网关层来做映射。
  • 通过网关层聚合,减少外部访问的频次,提升访问效率。
  • 节约后端服务开发成本,减少上线风险。
  • 为服务熔断,灰度发布,线上测试提供简单方案。
  • 便于扩展。
阅读全文 »

centos

今天在Docker中centos7镜像使用yum提示:Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfi
我使用ping www.huixing.org 发现网络是正常的。

遇到这种情况有两种做法:

查看网络是否畅通

ping www.huixing.org

如果显示没有连接的话,就说明没网,也就无法使用yum 命令。

网络畅通还是无法使用yum

在安装完CentOS后一般需要修改yum源,才能够在安装更新rpm包时获得比较理想的速度。国内比较快的有163源、sohu源、阿里云源,这里使用阿里云为例子。

作为运维人员任何修改文件最好都要备份

备份操作:
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

阅读全文 »

php

在开发过程中,例如要修改别人开发的代码或调试出问题的代码,需要对代码流程一步步去跟踪,找到出问题的地方进行修改。如果有一个方法可以获取到某段代码是被哪个方法调用,并能一直回溯到最开始调用的地方(包括调用的文件,行数,参数等),这样就能很方便的定位到出问题的地方。

php的debug_backtrace方法可以对代码调用进行跟踪,方便调试代码。

1
2
3
4
5
6
7
8
9
10
$traces = debug_backtrace();
//Remove other keys other than file/function/line
for($i=0; $i<count($traces); $i++) {
$all_keys = array_keys($traces[$i]);
foreach($all_keys as $key){
if($key != "file" && $key != "line" && $key != "function")
unset($traces[$i][$key]);
}
}
file_put_contents("/tmp/call_trace.log", "\n\n##################\n" . print_r($traces, true), FILE_APPEND);
阅读全文 »