![个人头像照片](https://ucc.alicdn.com/avatar/img_03bc0c3ac87dea26ad516ff17a3d8e52.jpg)
专注于互联网系统设计
谈谈后端业务系统的微服务化改造本文所提倡的微服务,是结合作者所在team自身业务特点来说的,适合自身的场景,是建立在团队人员素质到了,有成熟的基础设施和框架、中间件辅助,流程也规范,包括CI、敏捷等,团队都做好了准确去做这个转变,有足够的能力来实施,微服务化也就是水到渠成的事了。
一、软件需求 1、nginx源码包 下载地址:http://nginx.org/。笔者下载的是1.10.3。 2、pcre源码包。这是一个正则表达式库。nginx会用到这个开源库来做正则匹配。
联想到discuz,ecshop发布一个新版本的系统给大家使用,会提供utf-8,gb2312版本的代码下载。所以肯定是批量转换编码出来的。 这种是转换html文件。
笔者觉得,分库分表确实好的。但是,动不动搞分库分表,太麻烦了。分库分表虽然是提高数据库性能的常规办法,但是太麻烦了。所以,尝试研究mysql的分区到底如何。 之前写过一篇文章,http://www.cnblogs.com/wangtao_20/p/7115962.html 讨论过订单表的分库分表,折腾起来工作量挺大的,需要多少技术去折腾。
原创文章,转载注明出处 一、两种方案分库分表 一般业界,对订单数据的分库分表,笔者了解,有两类思路:按照订单号来切分、按照用户id来切分。 方案一、按照订单号来做hash分散订单数据 把订单号看作是一个字符串,做hash,分散到多个服务器去。
本文为原创文章,转载希望注明出处。 抢购业务数据库需要考虑的点如下: 一、超卖现象 场景如下: 库存数是5。现在3个用户来购买,a用户购买2个,b用户购买3个,c用户购买1个。
一、如何监控发生了主从延迟? 在从库机器上,执行show slave status,查看Seconds_Behind_Master值,代表主从同步从库落后主库的时间,单位为秒,若同从同步无延迟,这个值为0。
以前也没有深刻意识到它的重要性。直到后来,去接手一些遗留系统,那种混乱,寻找代码和代码文件多么费力。系统经过了很多人手,人员调岗,人员离职。每个人都有自己的风格,折腾一下,就闪了。丢下一个千疮百孔的系统。
一、session_id()对原来session文件和里面的数据,是怎么处理的? 测验办法: 是新创建一个session文件。那么原来PHPSESSID对应的服务器上的数据就不会用到了,因为新创建了一个文件。
$log_file_name = 'D:/static/develop/kuai_zhi/acagrid.com/public/Logs/'.date('Ym').'/'.
Redis和Memcache对比及选择 http://www.cnblogs.com/EE-NovRain/p/3268476.html 在选择内存数据库的时候到底什么时候选择redis,什么时候选择memcache,然后就查到下面对应的资料,是来自redis作者的说法(stackoverflow上面)。
//gb2312的话preg_match_all("/[".chr(0xa1)."-".chr(0xff)."]+/", $str, $chinese);echo implode("", $chinese[0]);//utf-8的话preg_match_all("/[\x{4e00}-\...
做统计的时候,null是不计算在count以内的。所以字段的值最好不要设置为null。 比如:select count(user_id) as beyond_num from fs_users_added where credits
一、每个用户都有自己的家目录 访问方式是:~/.ssh/id_rsa.pub 使用~就是表示家目录。 具体家目录在哪里,在用户密码配置文件中:/etc/passwd中。
从网上看到的,还不错。 来源: https://github.com/jobbole/awesome-programming-books 计算机系统与网络 《图灵的秘密:他的生平、思想及论文解读》 《计算机系统概论》 《深入理解Linux内核》 《深入Linux内核...
c语言系的命名风格:单词之间使用下划线分隔。如上图。 java语言是另外一个系,javascript属于java语系(当年就是想借助java的名气所以命名javascript)。
本文为纯原创文章,应朋友邀请而编写。文章花费了笔者大量的精力投入。琢磨着如何行文,怎么样通俗点,提炼出有用的观点来,放在标题中。目标的解决广大求职者的最关心的问题。 转载请注明来源地址。
参考:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html http://blog.csdn.net/alongken2005/article/details/8056910 socket_accept()是服务端接受客户端请求,一旦有一个客户端链接上来的话,则这个函数会返回一个新的socket资源,这个资源是与客户端通信的资源。
http://blog.csdn.net/lgouc/article/details/8235471 http://blog.sina.com.cn/s/blog_67c294ca01012qbu.html 数据对齐并不是操作系统的内存结构的一部分,而是C P U结构的一部分 是这么理解吗?cpu要读取内存中的数据,以多少为单位进行读取呢?以4个字节,还是8个字节。
函数库调用和系统调用的区别。操作系统层面上:系统调用是调用操作系统内核的一部分。系统调用,每个操作系统会存在不同。速度上:系统调用一次需要35微秒。函数库一次调用耗费半微秒。系统调用大概有70个。文件描述符和文件指针的区别将会进行干嘛呢。
以下是根据看书后的理解做的总结: 最早,unix是使用汇编编写,但是非常简单。后来觉得汇编,换种机器又得重新用另外一种机器汇编重写,太麻烦。于是想设计一种通用的语言,到各种机器上都能运行 当时发明了b语言,但是b语言并不成功(据说是很多缺陷,缺乏数据结构),后来者在此基础上改进,发明了c语言。
我发现,我们很多技术人员往往无限度适应需要人员,跟着提需求人的思路走,陷入进去了。 我的经验是:"以问题为导向,而非需求为导向"。提需求者,可能很多自己都不是很清楚自己想要什么样,想得与说的往往不一样。
1、数据库:,作者为阿里巴巴专业的mysqlDBA,学到许多的思维方式,如sql优化策略、功能撤下来的成本和系统的影响、有时候是需求存在问题没法达到完全实时所以实现准实时《数据库系统实现》从原理层面学到数据库系统的实现,所有关系型数据库都会遵循通用的理论,尤其是事务的实现原理通过此书看明白(以前只知道使用事务)。
1、避免使用魔数 if($age
a,b,c,d.....分别代表时间,从最早往后面。 白色区域表示空闲内存。灰色区域表示进程占据的内存,蓝色区域表示操作系统占据的内存,这部分是固定好的。 看内存碎片的发展过程: a图表示,假设内存目前有56m的内存空间。
以前看了一个观点,不错:不要的代码删除掉删除你没有使用的功能清理的时间正比于代码的数量,复杂性和糟糕的程度。如果代码的功能你目前没有使用,而且在可预见的将来也不会使用,那么就删除它,这会减少你浏览的代码数,降低复杂度(删除不必要的概念和依赖)。
用途:这个扩展是用来操作rabbitmq服务端的 一、安装总括 1、编译安装librabbitmq库 这是一个开源c语言的库。用来与rabbitmq进行通信 而php的php-amqp扩展就是使用这个库与服务端通信。
有一种方式是:下载rabbitmq-server-generic-unix压缩包,是不用编译的。是已经编译好的源码了 下面介绍编译源码安装 总括: 需要以下步骤: 1、安装erlange。
为什么开发功能变得越来越慢? 某天来一个技术,他跟老板说:这个系统太臃肿了。很乱,我很难开展工作下去,至少很难按照我的经验和设想来实施。如果想让我顺利干下去,办法就是对系统进行重构一次(重构代码,或者开发新的系统替代原来系统)。
开发中三个经典的原则 单一职责:一个类,一个方法专注做一件事情。不要混合多个目标。 比如我的"绑定手机接口",目标的确是干一件事情:绑定但是里面还是要判断:这个手机号是不是被占用,还要判断绑定历史,判断手机白名单只不过把判断绑定历史,判断白名单,封装成单独的方法来调用。
http://www.zhihu.com/question/19732473 本质都是为了提高效率为目的 我做一件事情,请求外部协助。外部还没响应结果,我要怎么办,一种办法是,我一直等着对方给我答复结果。
在free命令展示机器的内存消耗情况,会像这样展示 buffered 和cached本质内容有什么区别呢? 我没搞明白。我觉得需要追根溯源会更加理解本质。 英文是这样解释 A buffer is something that has yet to be "written" to disk. 这些数据准备写到磁盘的,但还没有写到磁盘,缓存在内存中。
tmpfs是一种基于内存的文件系统, tmpfs有时候使用rm(物理内存),有时候使用swap(磁盘一块区域)。根据实际情况进行分配。 rm:物理内存。real memery的简称? 真实内存就是电脑主板上那块内存条,叫做真实内存不为过。
想用php生成一个mysql数据字典导出来,用到下面代码会 $mysql_conn = mysql_connect ( "$dbserver", "$dbusername", "$dbpassword" ) or die ( "Mysql connect is error.
刚才看到文章这个看法很有同感,以前也没有深刻理解到可维护性的重要性。在现在的公司呆了一年半,才明白。因为现在的公司用户量大,团队开发人员多,遇到很多难以维护的代码,花费人员沟通成本,延缓功能的开发进度,去填补遇到的坑..... http://www.cnblogs.com/freeflying/p/4788494.html 一、性能不是不重要,而是他没有可维护性重要。
有个资料看得我云里雾里的。现在用自己的言语来总结一下,写文字,能够加深自己的理解。也会在写的过程中帮助自己发现理解方面瑕疵,继续查资料求证。 短链接的缺点:创建一个连接,程序执行完毕后,就会自动断掉与mysqlserver的链接。
看这篇文章:http://www.cnblogs.com/greyzeng/p/4077732.html 对评论引发我的思考。 网上有人说这句话我赞同: 优化和重构是两个概念啊,楼主还是没有搞清楚优化不宜过早主要指的是性能的优化不宜过早,因为很多性能优化其实没有对系统有明显的提升。
下面这篇思考,是在地铁上突然想到,然后把理解用自己的文字写在手机上。 扇区和磁盘块的区别是什么? 这么多的单位真的很难记忆,很难区别,最好是自己了解原理。物理层面分为磁道,扇区。
以后慢慢添加经验。随手把遇到的问题记录下来。 一、地址要定义在变量中,千万不要写死在代码中。 遇到一个坑。把地址都写死在模版或代码中了。以后要修改地址,变得很困难 下面是遇到的问题,要将通行证的地址修改为新版本的地址,这个应用中代码请求要改为请求新版本的地址。
Strict standards: Only variables should be passed by reference 网上查到资料有这么一句话: 在php5.3以上版本会出这个问题,应该也和php的配置有关,只要把这一句拆成两句就没有问题了。
从网上看了一些资料,为了方便自己理解,于是把它的编码原理,自己放在excel表格中清晰列出来,方便以后查阅。做的图如下: ascii编码表 这个表很大,截图不出来。
Pass_proxy走内网,被请求方的php使用remote_addr得到就是转发机器的内网地址,如192.168.10.141这样的。走外网,被请求方php的remote_addr得到就是转发机器的外网地址,如118.198.10.141。
什么是内存泄漏,我以前以为是内存被人可以拿到里面内容。 现在发现概念是内存区域没有释放掉。内存泄漏造成的表现形式是,进程越来越慢。慢的原因是,它申请的内存越来越多,没有释放掉内存。
这里系统专门指的是那种用户量大的系统,比如有几百万或者上千万的注册会员。因为小系统因为用户量少,不存在这种思考,考虑有时候是多余的。另外还有内部系统,给自己公司内部人员使用的,即便是出现了问题,也不会造成很大的问题,内部协调一下即可。
对文件系统原理学习的理解 按需分配。打开的文件属性才放入内存中。关键点是记录某个文件用到哪几块磁盘地址。一个文件可能占多个磁盘块,可能是一个。关键在于文件的的大小文件名,磁盘块地址,多个。
文件系统是操作系统的一部分,最终是目的是管理文件。 操作系统中之所以产生文件的概念,是为了方便多个进程可以共享一些数据,那么这些数据就要存储在磁盘上。多个进程可以进行访问。 把文件看成是磁盘上的地址空间。
$username = '刷_单8元1单淘宝客服20元1小时_我Q125556733jff'; var_dump(strlen($username)); var_dump(Library\Common::username_patten($username)); 一、使用strlen来判断长度 里面的一个汉字会认为长度是3个字符(utf-8编码情况下一个汉字3个字符,gbk编码就是2个字符长度) 例子: $username = '刷_单8元'; var_dump(strlen($username)); 长度是11。
我们的用户量大,修改js文件后,用户反馈登录出现问题。实际上刷新一下就没事了。就是因为用户的浏览器使用的还是本地缓存的js代码。 强制刷新一般就会重新去服务器获取新的js代码。但不能让用户每次都这样子去做。
常见的坑有两个: 一、获取的是内网的ip地址。在nginx作为反向代理层的架构中,转发请求到php,java等应用容器上。结果php获取的是nginx代理服务器的ip,表现为一个内网的地址。php获取REMOTE_ADDR就是这样一个情况(内网地址)。
/** * * 检查手机号码是否可用 * @param $cellphone 手机号码 */ public function checkPhone($cellphone) { $cellphone = trim($cellphone); ...