PHP Fatal error: Class 'PDO' not found

编程 OpenSkill 回复了问题 2 人关注 2 个回复 5286 次浏览 2015-08-28 17:26 来自相关话题

云智慧(北京)招聘信息

求职招聘 OpenSkill 发表了文章 0 个评论 3312 次浏览 2015-08-28 15:07 来自相关话题

  云智慧(北京)科技有限公司,是国内做SAAS服务的大厂,如果你有激情,对SAAS市场看好,就来加入我们吧! 我们目前主要有两款产品: 监控宝 和 透视宝 ,职位描述如下:    Java架构师: 岗位职责: ...查看全部
  云智慧(北京)科技有限公司,是国内做SAAS服务的大厂,如果你有激情,对SAAS市场看好,就来加入我们吧!
我们目前主要有两款产品: 监控宝 和 透视宝 ,职位描述如下:
  
 Java架构师:
岗位职责:
1.负责相关产品系统架构设计、改进与优化,解决开发中主要的技术难点;
2.负责系统框架和核心功能模块的代码开发及后期优化;
3.制定设计规范和开发规范;
4.负责对技术团队的培训及指导,定期介绍新技术促进团队技术提高;
5.协助QA测试、协助运维人员进行后续部署等。

任职要求:
1.至少5年以上开发经验,3年以上架构师经验;
2.精通数据结构,熟悉并掌握各种常见算法;
3.熟悉Linux操作系统及基于Linux平台和Java容器的负载均衡方案,熟悉数据共享、同步等的实现方案者更佳;
4.有以下经验者优先考虑:分布式队列、分布式任务分发框架、全文检索及分词技术、海量数据存储与分布式存储技术
职业诱惑:15k-25k 期权、年终奖、五险一金、商业险、租房补贴
 高级PHP工程师:
岗位职责:
1.参与公司产品网站、服务和服务器监控产品开发;
2.参与架构和功能设计;
3.少量客户技术问题支持工作。

任职要求:
1.计算机及相关专业;
2.3年以上PHP开发经验;
3.精通PHP,熟悉常见的PHP开发框架和技术,了解Python和Java者尤佳;
4.精通Mysql,对于Memcached, Redis等常见的NoSQL数据存储比较熟悉;
5.熟悉HTML、JS、JQuery、AJAX、CSS等前端技术;
6.熟悉Linux和常见Linux命令。
职业诱惑:15k-30k 年终奖、五险一金、商业保险、期权
Android工程师:
  岗位职责:
  1.负责公司产品相关Android端产品功能设计、开发和实现。

  任职要求:
  1.熟练掌握Java移动端应用开发;
  2.有2-3年Android原生开发经验;
  3.熟悉网络编程,理解http协议及scoket通信等网络编程技术;
  4.开发过图表及报表应用者优先;
  5.开发过消息推送应用者优先;
  6.有修改过Android系统源代码经验者优先;
  7.具有良好的沟通能力和团队合作精神。
职业诱惑:9k-18k 年终奖+五险一金+商业保险+期权
对职位感兴趣的同学,可以加QQ:986978241  给予内推机会!

浅谈docker文件系统分层与隔离

大数据 空心菜 发表了文章 0 个评论 4874 次浏览 2015-08-28 01:27 来自相关话题

        Docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚。下面就聊一下我对docker文件系统的理解       Docker 使用的支 ...查看全部
df1.png
   
    Docker 的很多特性都表现在它所使用的文件系统上,比如大家都知道docker的文件系统是分层的,所以它可以快速迭代,可以回滚。下面就聊一下我对docker文件系统的理解
 
    Docker 使用的支持的文件系统有以下几种: aufs、devicemapper、btrfs  Vfs 我们先来介绍一下aufs


一、  Aufs(advanced multi layered unification filesystem)


    Aufs直译过来就是高级分层统一文件系统。做为一种Union FS 它支持将不同的目录挂载到同一个虚拟文件系统下. 这个怎么理解呢。通过一条命令我们来看一下吧。
mount -t aufs -o br=/tmp/dir1=ro:/tmp/dir2=rw none /tmp/newfs

    []-o 指定mount传递给文件系统的参数[/][]br 指定需要挂载的文件夹,这里包括dir1和dir2[/][]ro/rw 指定文件的权限只读和可读写[/][]none 这里没有设备,用none表示[/]

    这个结果是什么样子的呢。 就是把/tmp/dir1 t和/tmp/dir2  合并之后挂载到/tmp/newfs ,如果这时在/tmp/dir1 下创建一个文件a  /tmp/dir2下创建一个文件b 则  在/tmp/newfs 会看到a,b 这两个文件,并且a 是只读的, 如果有相同的文件则以先挂载的为准,后面挂载的操作会被忽略掉
 
   通过对Aufs的理解,大家可以想像一下docker所谓的“layer”的概念。还是实际的例子说明一下。

    一个镜像通过docker save  保存之后 会被打成一个tar 包,我们来看下这个tar包里都有些什么?
docker save cloud_jiankongbao:01.tar cloud_jiankongbao:01
    通过上面的语句我们把镜像保存出下来。可以看到,保存下来的是tar 包。 不是.iso文件^_^,镜像解压之后是什么呢?
ls . 
a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329
d9bde94c518a16a886514758b6b4431200145ecd58e30c5633ac3c0256544d77
f1b10cd842498c23d206ee0cbeaa9de8d2ae09ff3c7af2723a9e337a6965d639
fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f
repositories
    出现了四个目录文件,再通过
docker images --tree
└─f1b10cd84249 Virtual Size: 0 B
└─fb9cc58bde0c Virtual Size: 203.1 MB
└─a005304e4e74 Virtual Size: 203.1 MB
└─d9bde94c518a Virtual Size: 1.957 GB Tags: cloud_jiankongbao:01
    大家可以看到,4个目录其实分别是4个ID(注每次使用docker commit 提供对docker的修改之后就会产生一个新的id,就是通过这个ID可以实现对镜像的回滚)。每个目录下有json  layer.tar  VERSION 这三个文件。我们再看一下layer.tar 
cd fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f;tar -xf layer.tar;ls

ls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/
bin etc json lib lost+found mnt proc sbin srv tmp var
dev home layer.tar lib64 media opt root selinux sys usr VERSION
    这里存放的系统文件。

    我们再看一下镜像的4个不同ID的系统。

    f1b10cd84249 这个镜像是初始镜像,大小为0, fb9cc58bde0c 这个镜像是在f1b10cd84249基础上创建新的镜像,a005304e4e74是以fb9cc58bde0c为基础创建新的镜像。是树状继承的关系。我们再看下bin目录下的文件
ls a005304e4e74c1541988d3d1abb170e338c1d45daee7151f8e82f8460634d329/bin/
gtar tar
ls fb9cc58bde0c0a8fe53e6fdd23898e45041783f2d7869d939d7364f5777fde6f/bin/
arch cpio egrep gunzip logger mountpoint raw sleep true
awk cut env gzip login mv readlink sort umount
basename date ex hostname ls netstat rm stty uname
bash dd false ipcalc lsblk nice rmdir su unlink
cat df fgrep iptables-xml mkdir nisdomainname rpm sync usleep
chgrp dmesg find iptables-xml-1.4.7 mknod ping rvi taskset vi
chmod dnsdomainname findmnt kill mktemp ping6 rview touch view
chown domainname gawk link more ps sed tracepath ypdomainname
cp echo grep ln mount pwd sh tracepath6 zcat
    a005304e4e74 只有两个文件 fb9cc58bde0c包括了大部分bin下的文件,这就是Aufs,理解起来感觉有点像增量备份。


二、简单的说一下devicemapper 


    devicemapper是利用了Snapshot 和Thinly-Provisioned Snapshot两种原理。将多个快照挂在同一个卷下从而实现文件系统的分层。不过使用devicemapper 的话一个container的大小最大只能是10G。
 
    在启动docker daemon时用参数-s 指定:  docker -d -s devicemapper
 
    关于隔离是怎么实现的呢,当容器基于镜像启动之后,每个容器都会获得自己的写读可写的文件系统层。原镜像的那部分文件系统是只读的,从而实现每个容器的在文件系统上的离隔。
 
   平时大家都在说dokcer 是弱隔离的,为什么呢?因为他没有隔离的很彻底,比如内核,内核是跟大家共用的,跟宿主机共用同一个内核,SELinux、 Cgroups以及/sys、/proc/sys、/dev/sd*等目录下的资源是与宿主机共用的。

   如果要隔离的彻底那就是VM了,而且如果dockers要想实现这些隔离就必然要牺牲一下现在轻量级的特性。那还不如直接用虚拟机好了!
文章转载出处

Ucloud DevOps Workshop互联网企业的运维进化论嘉宾资料分享

学习资源 空心菜 发表了文章 0 个评论 3114 次浏览 2015-08-28 01:05 来自相关话题

肖力 西山居 IT运维经理 嘉宾介绍:肖力,金山西山居系统运维经理,前盛大游戏研究员。15年工作经验,10年游戏行业运维经验,5年KVM虚拟化运维经验维护有微信订阅号:“KVM虚拟化实践”著 ...查看全部


肖力


up1.jpg
西山居 IT运维经理 嘉宾介绍:肖力,金山西山居系统运维经理,前盛大游戏研究员。15年工作经验,10年游戏行业运维经验,5年KVM虚拟化运维经验维护有微信订阅号:“KVM虚拟化实践”著有《深度实践KVM》一书,预计9月份出版。


王津银(老王)


up2.jpg
UC IT运维经理 嘉宾介绍:老王,先后在腾讯、YY、UC(1年多)从事各种业务、各种架构服务的运维工作。目前通过公众号【互联网运维杂谈】来分享自己的运维历程,倡导价值化运维理念。


崔玉明


up3.jpg
腾讯 数据库工程师/管理员 嘉宾介绍:腾讯游戏DBA TEAMLeader。从事技术运营工作13年,2007年加入腾讯公司互动娱乐运营部从事DBA岗位工作,现任DBA组及SA组负责人。在腾讯前6年,带领团队负责腾讯海量游戏Mysql及云存储的运维从0到1,从1到云的服务化平台建设。最近一年多主要精力在参与互娱成本优化以及系统运维工作。
介绍的技术点:
    []肖力:虚拟化项目运维实践[/][]老王:我的互联网运维理论与实践[/][]崔玉明:仓管员发展自白[/]

三位嘉宾的PPT下载地址:http://pan.baidu.com/s/1wPakY
 
开源技术社区QQ群号:372476089  欢迎加入互相学习
扫码关注微信号:
opsk.jpg

我的docker为什么总是拉去镜像失败呢

大数据 空心菜 回复了问题 2 人关注 3 个回复 4792 次浏览 2015-08-27 00:01 来自相关话题

兄弟连Linux基础教学视频

学习资源 空心菜 发表了文章 0 个评论 2712 次浏览 2015-08-26 23:51 来自相关话题

    此次分享给大家的是兄弟连最新版本的Linux基础教学视频,因为兄弟连是做PHP培训起家的学校,所以它教的Linux的知识是比较入门级别的。但是作为Linux初学者,这个视频对你还是非常有帮助的,如果你是一个持续学习Linux的爱好者,学习完本视频后,你 ...查看全部
linuxjc.png

    此次分享给大家的是兄弟连最新版本的Linux基础教学视频,因为兄弟连是做PHP培训起家的学校,所以它教的Linux的知识是比较入门级别的。但是作为Linux初学者,这个视频对你还是非常有帮助的,如果你是一个持续学习Linux的爱好者,学习完本视频后,你可以接着学习我之前分享的老男孩中高级Linux学习视频,老男孩中高级学习视频下载地址请看:http://openskill.cn/article/76
 
   本次分享的兄弟连Linux基础学习视频下载地址:http://pan.baidu.com/s/1c02k6wo
 
   开源技术社区QQ群号:372476089  欢迎加入互相学习
   扫码关注微信号:
opsk.jpg

 

Docker主机间怎么共享数据卷

大数据 OpenSkill 发表了文章 0 个评论 4757 次浏览 2015-08-26 00:07 来自相关话题

     Docker容器在不同的主机间共享数据是一件很棘手的事情。本文从"Docker容器实践"中采取,我们将研究一个轻量级,一个更复杂的方式在不同的主机间共享Docker数据卷。      尽管容器之间共享同一台主机上的数据变得更为简便,跨主机 ...查看全部
dk1.png

     Docker容器在不同的主机间共享数据是一件很棘手的事情。本文从"Docker容器实践"中采取,我们将研究一个轻量级,一个更复杂的方式在不同的主机间共享Docker数据卷。
     尽管容器之间共享同一台主机上的数据变得更为简便,跨主机间共享Docker数据卷比较棘手。数据容器是解决这个问题的一个方法,但如果数据经常变化或特别大,这样做会变得笨拙。
     我们要考察两个解决这个问题的方法。第一个是一个轻量级的分布式解决方案使用BitTorrent协议,仅仅需要安装Docker。 第二是使用NFS,并引入基础设施的容器的概念的更复杂的解决方案。


方法一:分布式数据卷BitTorrent的同步


     当Docker在一个组中实验,希望在组内共享大量数据,但是可能共享服务器没有足够的能力分配资源。懒惰的解决方案是在你需要他们的时候复制其他团队成员的最新文件,这将对一个更大的组失去控制。
     对此的解决方案是使用一个分散的工具共享文件–没有专门的资源要求。
问题:
     你想在互联网上共享跨主机的卷
解决方法:
     使用BitTorrent同步image共享卷
讨论:
    下面说明图显示了我们的目标,结束与设置:
dk2.png
   
     A - 该BTSync服务器是一个拥有我们将要共享的/data数据卷Docker容器
B - 在同一主机上设置一个容器从BTSync服务器上挂载数据卷
C - 在一个单独的网络中的其他主机,在BTSync服务器生成一个密钥,客户端可以通过引用BitTorrent协议来访问共享数据。
D - 在另外一台主机上的BTSync客户端,从第一主机BTSync服务器挂载数据同步更新/data数据。
E - 容器从BTSync客户端挂载数据卷
     最终的结果是卷/data-即方便地同步在互联网上,而不需要任何复杂的设置。
     在您的主服务器上运行这些命令来设置第一台主机上的容器:
[host1]$ [#A]docker run -d -p 8888:8888 -p 55555:55555 --name btsync ctlc/btsync
$ [#B]docker logs btsync
Starting btsync with secret: [#C]ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 By using this application, you agree to our Privacy Policy and Terms. http://www.bittorrent.com/legal/privacy http://www.bittorrent.com/legal/terms-of-use
total physical memory 536870912 max disk cache 2097152 Using IP address 172.17.4.121
[host1]$ [#D]docker run -i -t --volumes-from btsync ubuntu /bin/bash
$ touch /data/shared_from_server_one [#E] $ ls /data shared_from_server_one
     A -运行发表CTLC / btsync image btsync守护程序容器调用并打开所需的端口
     B -获取 btsync容器的输出,所以我们可以记下key
     C -记下key-不同的运行产生有所不同
     D-启动一个交互式的容器从btsync服务器的卷
     E-添加文件到/data
     在第二个服务器上打开一个终端,运行以下命令来设置数据同步
[host2]$ docker run -d
--name btsync-client -p 8888:8888 -p
55555:55555 ctlc/btsync ALSVEUABQQ5ILRS2OQJKAOKCU5SIIP6A3 [#A]
[host2]$ docker run -i -t --volumes-from btsync-client ubuntu bash [#B] $ ls /data shared_from_server_one [#C] $ touch /data/shared_from_server_two [#D] $ ls /data
shared_from_server_one shared_from_server_two
     A -启动 btsync客户端容器与host1上的守护程序运行生成的密钥守护进程
     B -启动安装卷从我们的客户守护进程的互动容器
     C - host1上创建的文件已被转移到主机2
     D -创建 host2上的第二个文件
     回到主机1的运行容器,我们应该看到的文件,就像第一次是在主机之间进行同步:
$ ls /data
shared_from_server_one shared_from_server_two
      注:文件同步是没有时间保证,所以你可能要等待同步数据。这是特别真实的更大的文件。

      警告:由于数据被发送到互联网和处理的协议,你没有控制,不要依赖于此,如果你有任何有意义的安全性,可扩展性或性能约束。


方法二:通过NFS共享数据


      在一些大公司极有可能已经在使用NFS,NFS是一种行之有效的选项作为文件中心服务。Docker想要工作,它能够访问这些共享文件通常是很重要的!
      然而,Docker不支持NFS开箱即用和每个集装箱上安装NFS客户端,以便能够挂载远程文件夹不被认为是最佳时实践。相反,建议的方法是有一个容器用作从NFS翻译为Docker更友好的概念–卷!
问题:
      你要无缝访问远程文件系统通过NFS
解决方法:
      使用基础设施的数据容器代理访问
讨论
      这种技术建立在数据容器技术之上。
下图给出了这个抽象的概念:
dk3.png

      NFS服务器暴露内部目录的文件夹/出口,这是安装在主机绑定。Docker主机再将这个文件夹使用NFS协议mount到/mnt文件夹。然后,一个所谓的基础设施容器被创建,它结合了安装文件夹。
     这似乎有点过度设计乍一看,但好处是,它提供了一个间接层就Docker容器而言:他们需要做的是安装卷从预先约定的基础设施的容器,谁是负责基础设施可以担心的内部管道,可用性,网络等。
     彻底处理NFS是超出了本书的范围。然而,我们去通过一台主机上建立这样一个共享的步骤(即NFS服务器的元素在同一主机作为Docker容器)。这已经在Ubuntu 14.04测试。
     想象一下,你想分享你的主机/opt/test/db,其中包含的文件mybigdb.db。
     使用root,安装NFS服务器创建/export目录,并开放权限:
apt-get install nfs-kernel-server mkdir /export chmod 777 /export
     现在挂载db目录/opt/test/db到/export
$ mount --bind /opt/test/db /export
     现在你应该可以看到 /opt/test/db中的挂载的内容
     现在加入这一行到您的etc/exports文件中
/export       [#A]127.0.0.1([#B]ro,fsid=0,insecure,no_subtree_check,async)
      A -对于这个概念证明的例子中我们对127.0.0.1,这违背了对象有点安装在本地。 在真实的场景中,你会锁定下来的一类IP地址,如192.168.1.0/24的。 如果你真的很喜欢玩火,你可以打开它的世界,而不是127.0.0.1!
     B -为安全起见,我们安装件只读这里,*但是你可以用RW更换RO安装读写。 请记住,如果你这样做,那么你就需要异步标志出现后添加no_root_squash会标志 - 但考虑安全性在此之前沙坑外面去!
挂载NFS上的目录/ mnt目录,出口,我们在指定的文件系统的/ etc / exports的上面,然后重新启动NFS服务,拿起变化: 
$ mount -t nfs 127.0.0.1:/export /mnt
$ exportfs -a
$ service nfs-kernel-server restart
     现在您已经准备好运行基础设施的容器:
$ docker run -ti --name nfs_client --privileged -v /mnt:/mnt busybox /bin/true
      TODO:检查一个以上要求
      现在,我们可以运行 - 没有特权,或底层实现知识 - 目录,我们希望访问:
$ docker run -ti --volumes-from nfs_client debian /bin/bash root@079d70f79d84:/# ls /mnt myb root@079d70f79d84:/# cd /mnt root@079d70f79d84:/mnt# touch asd touch: cannot touch `asd': Read-only file system
     提示:如果你有很多这些容器来管理使用的运营效率的命名约定,你可以通过命名约定管理操作更容易,例如——名为nfs_client_opt_database_live容器暴露/opt/database/live路径。
这种模式的一个共享资源,在多个容器中使用的其他人使用的共享资源,是一个强大的,可以使开发工作流程更简单。
原文地址

老男孩中高级Linux学习视频

学习资源 空心菜 发表了文章 0 个评论 3077 次浏览 2015-08-25 21:17 来自相关话题

    这次分享给大家下载的是,老男孩的Linux运维中高级教学视频,希望对刚学习Linux的同学和需要温故Linux知识的同学有帮助!    视频资料下载地址:http://pan.baidu.com/s/1i3JBkUh ...查看全部
linuxs.jpg
  
 这次分享给大家下载的是,老男孩的Linux运维中高级教学视频,希望对刚学习Linux的同学和需要温故Linux知识的同学有帮助!
   视频资料下载地址:http://pan.baidu.com/s/1i3JBkUh
 
开源技术社区QQ群号:372476089  欢迎加入
扫码关注微信号:
weixin.jpg

 

Python异常处理的三种常用方法

编程 koyo 发表了文章 0 个评论 2497 次浏览 2015-08-25 20:47 来自相关话题

如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:try: 语句1 语句2 . . 语句N e ...查看全部
如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序:
try:
语句1
语句2
.
.
语句N
except .........:
do something .......
但是你并不知道"语句1至语句N"在执行会出什么样的异常,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,那么"except ......"这句应怎样写?
总结了一下3个方法:


方法一:捕获所有异常


try:  
a=b
b=c
except Exception,e:
print Exception,":",e



方法二:采用traceback模块查看异常


#引入python中的traceback模块,跟踪错误
import traceback
try:
a=b
b=c
except:
traceback.print_exc()


方法三:采用sys模块回溯最后的异常


#引入sys模块
import sys
try:
a=b
b=c
except:
info=sys.exc_info()
print info[0],":",info[1]
但是,如果你还想把这些异常保存到一个日志文件中,来分析这些异常,那么请看下面的方法:
把traceback.print_exc() 打印在屏幕上的信息保存到一个文本文件中
import traceback
try:
a=b
b=c
except:
f=open("c:log.txt",'a')
traceback.print_exc(file=f)
f.flush()
f.close()

shell脚本学习资料(最爱)

学习资源 Ansible 发表了文章 2 个评论 3091 次浏览 2015-08-25 10:36 来自相关话题

     这是我进入linux世界的时候,学习shell编程知识,最喜欢的一份文档,从12年保留到现在,现在分享给正在学习shell编程的同学和后来者!     文档下载地址:http://pan.baidu.com/s/1hqlh ...查看全部
shell.png
   
 这是我进入linux世界的时候,学习shell编程知识,最喜欢的一份文档,从12年保留到现在,现在分享给正在学习shell编程的同学和后来者!
    文档下载地址:http://pan.baidu.com/s/1hqlhrcK
 
    开源技术社区QQ群号:372476089  欢迎加入互相学习
    扫码关注微信号:
opsk.jpg