博文

目前显示的是 七月, 2014的博文

azure真是远远没法和AWS比

VM经常突然自动重启按照官方说法,大约两种情况会导致VM自动重启(无任何前兆通知)Windows Azure 大约每 2-3 个月更新一次主机环境,以确保始终为平台上运行的所有应用程序和虚拟机提供安全的环境当检测到主机服务器故障时,Windows Azure 服务会自动修复,在该服务器上运行的 VM 会迁移到其他主机所以这种事情就跟大姨妈一样,差不多每个月都会遇到。更详细信息请参考官方博客 《Why did my Azure VM restart?》用户在留言板上把微软骂出翔了。也许你会说,谁叫用户不做HA的。请看下一条Load Balancer功能太简陋Azure没有7层交换,它的Load Balancer不支持session粘滞,不识别cookie。不支持HTTPS。调度方式Round Robin Only!!!没有MySQL云服务虽然Azure有SQL服务,但是那是SQL Server啊!不是MySQL!如果你实在想要,可使用一个第三方厂商cleardb提供的addon,需另外付费。由于VM经常无前兆的重启,所以自己想搭建稳定的MySQL服务极难。如果要把MySQL的监控和主从切换做成全自动化,一般的创业公司根本没那么强的实力。再要么,你就24 oncall,准备随时切换吧。p.s.谁知道tomcat的mysql jdbc pool如何做成自动切换MySQL Server地址?它是配置在context.xml中,在app启动的时候初始化的。我能想到的是就是每次要切换数据库地址的时候,人工上去改,然后重启tomcat。再要么就是自建DNS,但是我还没整过。可是DNS又得做HA,这尼玛…… 我买你云服务到底买了个啥啊!最后推荐一下cnblogs的运维博客:写了很多关于阿里云和Azure的坑http://www.cnblogs.com/cmt/tag/%E9%98%BF%E9%87%8C%E4%BA%91/http://www.cnblogs.com/cmt/tag/%E4%BA%91%E8%AE%A1%E7%AE%97/

新疆奇葩的便民卡(良民证)制度

新疆出了一个便民卡制度,没有这个卡新疆户口的人就不能在外地租房子、住酒店、就医、出差。 哪怕你去一下你们家旁边那个隔壁县,也得先办便民卡。租房子不仅得要便民卡,还得要流动人口准住通知书、居住证。下面转载一下政府公告伊宁市人民政府关于启用流动人口便民联系卡的通告 根据新疆维吾尔自治区综治办、公安厅《关于印发<流动人口便民联系卡和特定居住证统一样式>的通知》要求,2014年5月1日在全疆启用流动人口便民联系卡。现就伊宁市启用流动人口便民联系卡相关事宜通告如下:1、便民联系卡是流动人口在流入地经商、务工、务农、租房、居住登记及申领居住证的凭证,享受流入地便民服务的载体、维护自身合法权益的手段。2、便民联系卡有效期为一年,自签发之日起计算。3、新疆维吾尔自治区行政区域内年满十六周岁以上,离开户籍所在地(经常居住地)县级行政区域到其他行政区域居住的外出务工、务农、经商人员和外出就医、学习、探亲及其他原因需要在流入地租赁房屋的人员,必须在外出前到户籍所在地(经常居住地)村(社区)综治工作站(警务室)申领便民联系卡。4、流动人口到达流入地之日起3个工作日内,应当持本人身份证和便民联系卡到流入地所属村(社区)综治工作站(警务室)申报居住登记。5、年满16周岁以上的流动人口拟在现居住地居住30日以上的,应当在申报居住登记的同时申领居住证(探亲、旅游、就医、出差等人员除外)。6、如需在流入地租赁房屋,须持出租人房屋租赁证、本人身份证、便民联系卡到居住地村(社区)综治工作站(警务室)领取流动人口准住通知书,与出租人签定房屋租赁合同后方可入住。流动人口无便民联系卡的,不得在流入地租赁房屋。7、对不按照规定申报居住登记、申领居住证和便民联系卡的流动人口和未按照规定办理出租房屋备案登记和房屋租赁证的出租人,将按照《新疆维吾尔自治区流动人口服务和管理办法》及相关法律法规依法处罚;对不履行责任的用工单位和出租房屋业主,将按照《中华人民共和国治安管理处罚法》和《新疆维吾尔自治区流动人口服务和管理办法》从严处理,造成严重后果的依法追究法律责任。本通告自2014年5月1日起施行。这样的制度如果在全国推广开来,简直不堪设想。

在guice中使用jndi以及jdbc pool

实现JndiProviderclassJndiProvider<T> implementsProvider<T> { @Inject Context context; final Class<T> type; final String name; publicJndiProvider(Class<T> type, String name){ this.type = type; this.name = name; } public T get(){ try { return type.cast(context.lookup(name)); } catch (NamingException e) { thrownew RuntimeException(e); } } } 这个Provider的构造函数传入两个参数:type 要查找的对象的类型,比如javax.sql.DataSource.classname 是指resource name。在web.xml中配置的那个。绑定DataSource的实现在ServletModule或者其它某个Module的配置中写bind(javax.naming.Context.class).to(javax.naming.InitialContext.class); bind(javax.sql.DataSource.class).toProvider( new JndiProvider<javax.sql.DataSource>(javax.sql.DataSource.class, "java:/comp/env/jdbc/mydb")); 那么当你想用javax.sql.DataSource类型的对象时,它就会绑定到JNDI中名为"java:/comp/env/jdbc/mydb"的实例。
但是这么做有个问题,InitialContext不是thread safe的(所以不能做成Singleton),但是构造一个InitialContex…

A Double-Checked Locking Error in JDK

我昨天在使用javax.xml.bind.DatatypeConverter这个类的时候发现,它内部隐藏了一个Singleton的实现,而且是有问题的。代码大概如下:finalpublicclassDatatypeConverter{ // delegate to this instance of DatatypeConverterprivatestatic DatatypeConverterInterface theConverter = null; privatestaticsynchronizedvoidinitConverter(){ theConverter = new DatatypeConverterImpl(); } publicstatic String parseString( String lexicalXSDString ){ if (theConverter == null) initConverter(); return theConverter.parseString( lexicalXSDString ); } } 其中,theConverter这个变量在声明的时候没有加上volatile修饰符。参考:《The "Double-Checked Locking is Broken" Declaration》

2014/07/02 网站系统升级

我刚把这台服务器的操作系统从Red Hat Enterprise 6.5升级到Red Hat Enterprise 7.0。目前我感受到的操作系统的变化如下:不再支持32位。虽然依然可以用虚拟机运行32位,但是AWS不支持这个了。AWS中运行它的方式也从半虚拟化变成了HVM。apache从2.2升级到2.4。但是因为mod_spdy一直不支持apache 2.4,所以本站就只好暂时放弃spdy了。用systemd替换了SysV 和 Upstart 。所以不要用service xxx start了,换成systemd start xxx。另外,journalctl 我也非常用不习惯,每次都要加上--no-pager。官方源中MySQL被换成了MariaDB 5.5。不过没关系,大不了自己手动从dev.mysql.com下载rpm。kernel升级到了3.10。另外,十分感谢AWS提供了t2.micro这种新型的micro实例来替代之前的t1.micro。速度差别十分十分显著。我感觉这两种虚拟机主要的差别有以下几点:cpu的调配划分上硬盘从EBS only变成了SSD(鸟枪变火箭炮啊!)内存从600MB升级到了1GB昨天我还试用了一下Google Compute Engine,因为它的服务器在台湾,从国内访问连通性很差,作罢。稍等,我再试一试azure。