Mac下搭建go语言开发环境

笔者使用的是mac系统,因此介绍mac下golang的环境搭建。

1、安装Golang的SDK

google官网被墙下载地址如下: http://www.golangtc.com/download ,下载最新的安装包,之后双击安装即可。

安装完成之后,打开终端,输入go、或者go version(查看安装版本)出现如下信息即表示安装成功:

LCore:~ lcore$ go version
go version go1.4.1 darwin/amd64
LCore:~ lcore$

2、配置环境变量

安装完sdk之后接下来便是配置环境变量了,打开终端输入[……]

继续阅读

高可用可伸缩架构经验谈

分布式架构解决的主要问题

现阶段,分布式架构能够解决很多确实存在的问题。第一个就是高可用。举一个简单的单机房高可用的例子,你肯定不希望因为一个磁盘损坏一个机器损坏一个交换机损坏,就导致整个系统的服务不可用了。第二个,就是在系统容量增长的情况下如何实现可伸缩。第三个是偏管理方面。如果能够让每个七到十人的小组的工作是独立的服务单元,各个小组之间的工作有比较清晰的边界,他们合作起来会方便很多。第四个是服务质量,比如说中国就有南北之间的网络,如果你能让北方的用户直接访问北方的机房,南方用户访问你南方的机房,如果你有合适的机制能够让这些用户的所有的操作都能够整合起来,当做一个网站来用,这就是用多机[……]

继续阅读

基于swoole扩展实现真正的PHP数据库连接池

PHP的数据库连接池一直以来都是一个难题,很多从PHP语言转向Java的项目,大多数原因都是因为Java有更好的连接池实现。PHP的MySQL扩展提供了长连接的API,但在PHP机器数量较多,规模较大的情况下,mysql_pconnect非但不能节约MySQL资源,反而会加剧数据库的负荷。

假设有100台PHP的应用服务器,每个机器需要启动100个apache或fpm工作进程,那每个进程都会产生一个长连接到MySQL。这一共会产生1万个My SQL连接。大家都知道MySQL是每个连接会占用1个线程。那MYSQL就需要创建1万个线程,这样大量的系统资源被浪费在线程间上下文切换上。而你的业务[……]

继续阅读

PHP开发异步高性能的MySQL代理服务器

MySQL数据库对每个客户端连接都会分配一个线程,所以连接非常宝贵。开发一个异步的MySQL代理服务器,PHP应用服务器可以长连接到这台Server,既减轻MYSQL的连接压力,又使PHP保持长连接减少connect/close的网络开销。

此Server考虑到了设置了数据库连接池尺寸,区分忙闲,mysqli断线重连,并设置了负载保护。基于swoole扩展开发,io循环使用epoll,是全异步非阻塞的,可以应对大量TCP连接。

程序的逻辑是:启动时创建N个MySQL连接,收到客户端发来的SQL后,分配1个MySQL连接,将SQL发往数据库服务器。然后等待数据库返回查询结果。当数据库[……]

继续阅读

关于PHP程序员解决问题的能力

这个话题老生长谈了,在面试中必然考核的能力中,我个人认为解决问题能力是排第一位的,比学习能力优先级更高。解决问题的能力既能看出程序员的思维能力,应变能力,探索能力等,又可以看出他的经验。如果解决问题能力不佳是无法通过面试的。

这里举个例子,假如我执行了一个PHP的脚本,如php test.php,预期是可以返回一个字符串。但执行后没有任何信息输出,这时候通过什么方法能知道程序错在哪里?这里可以将解决问题能力分为8个等级,越到后面的表示能力越强。

Lv0 查看PHP错误信息
程序没有达到预期效果,证明代码出错了,看PHP的错误信息是第一步。如果直接忽略错误信息,表明这个人不适合担任[……]

继续阅读

大型网站运营的技术经验分享

一、日志系统
对于一个大型网站来说,代码库非常庞大,模块众多。部门协作的人数规模在百人以上,如何跟踪定位问题不像小网站那样容易。而且我们的服务器都是集群化的,动辄几千台。有一套可查询方便使用的日志系统至关重要。

对于日志的使用也有了一定的经验。我们的日志通常会非常详细的记录各种参数,环境变量,HOST等信息,在出现异常的情况下,必须要记录日志。我们使用了MySQL按时间分片的方式来记录日志,所有集群内节点均通过网络方式来写入到中心日志系统。

在管理端我们提供了很方便友好的工具,来查询定位日志,可按用户ID、类型、时间等几种索引方式查询。日志系统帮助我们定位到了很多问题。

二[……]

继续阅读

关于C10K、异步回调、协程、同步阻塞

最近发现有朋友争论这些话题,发现很多人对一些基础的常识并不了解,在此文做一下解释。此文未必能解答所有问题,各位能有一个大致的了解就好。

C10K的由来
大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多。一台服务器同时在线100个用户估计在当时已经算是大型应用了。所以并不存在什么C10K的难题。互联网的爆发期应该是在www网站,浏览器,雅虎出现后。最早的互联网称之为Web1.0,互联网大部分的使用场景是下载一个Html页面,用户在浏览器中查看网页上的信息。这个时期也不存在C10K问题。

Web2.0时代到来后就不同了,1方面是普[……]

继续阅读

大型网站架构演变和知识体系

之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,而没有很详细的讲为什么需要做这样的演变,再加上近来感觉有不少同学都很难明白为什么一个网站需要那么复杂的技术,于是有了写这篇文章的想法,在这篇文章中将阐述一个普通的网站发展成大型网站过程中的一种较为典型的架构演变历程和所需掌握的知识体系,希望能给想从事互联网行业的同学一点初步的概念,:),文中的不对之处也请各位多给点建议,让本文真正起到抛砖引玉的效果。

架构演变第一步:物理分离webserver和数据库
最开始,由于某些想法,于是在互联网上搭建了一[……]

继续阅读

php-fpm 的启动、关闭、重启操作命令

PHP-FPM使用信号控制,master进程可以理解以下信号:

INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块

示例:

php-fpm 启动:
/usr/local/php/sbin/php-fpm

php-fpm 关闭:
kill -INT `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm 重启:
kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

查[……]

继续阅读

关于PHP解析域名不成功的问题

今天在做QQ互联时遇到 PHP 无法解析域名的问题,提示Warning: file_get_contents(): couldn’t resolve host name in错误。

首先在服务器上ping graph.qq.com不通,根据经验应该是DNS服务器设置问题。修改/etc/resolv.conf文件,设置为正确的DNS服务器,再次ping graph.qq.com成功。

然后发现在命令行上执行PHP脚本没有问题,在浏览器访问程序出错,报Warning: file_get_contents(): couldn’t resolve host name in……,经过反复查找[……]

继续阅读