项目经验-汪海

项目一:单节点数据库转到oracle rac

 

项目简介(功能与用途):

项目发生在04年初,由于当时采用的是基于linuxpc server,随着网站访问量的突飞猛涨,单台linux server已经基本达到了瓶颈,主机端系统load基本在10以上,由于linux server的硬件已经不能扩展,而当时的预算又不够采用小型机,所以需要有一种可扩展方案来解决。这个时候我们就想到了使用oracle 9i rac来实现数据库的横向扩展,同时对应用系统做切分,分成了3个数据库,每个库设计容量是2个节点,可以提供一天5000万次访问量的方案。

 

项目难点与解决方案:

在确定方案后,我们开始针对机器进行选型测试,对比hp4640sun880单节点数据库和dell linux serveroracle rac的性能,我们的测试团队设计了测试用例,用app集群直接跑网站真实应用去测试数据库性能,测试结果在相同访问量下dell pc server2个节点的racsql相应时间最短,所以最终选定了dell linux serveroracle rac的方案。在存储方面我们最初是用netappnas存储作为数据库存储,但是在使用过程中发现netappnas存储在数据块频繁变化的环境下多块读的效率不是十分理想,所以决定采用emc CLARiiON系列存储。选型完毕后项目进入实施阶段,实施初期是搭建san存储架构,把所有emc存储通过光纤交换机和主机相连,每2pc server拖一台存储,一共是6pc server3套存储。在存储架构搭建完毕后,我们开始创建oracle rac,采用2个节点的rac 然后开始进行数据迁移方案,我们使用oracle materialized view来同步大表,在切换前几天基本实现新老系统的大表持续同步,在系统切换当晚我们切断老系统,刷新materialized view最后一点还没同步的数据到新系统,同时远程insert小表到新系统,总共切换时间在30分钟之内完成。系统切换后重新启动应用服务器,整个应用系统正常提供服务。

 

项目成功与失败的经验归纳:

在新系统上线后,主机端load下降到0.5左右,用户反映系统相应速度明显提升,app服务器的等待队列明显减少,在很长一段时间里面这套系统都表现出了相当稳定的运行状态。

这是我们第一次使用集群数据库,同时也是第一次使用san存储,整个方案完全由我们的DBA,SA,JAVA构架师,测试团队制定并实施,在当时的业界我们的做法还是比较领先的,也是oracle rac的早期用户。在一段时间的稳定期后,由于业务的飞速发展,我们的系统访问量达到了8000万次每天,在这个时候rac的一些弊端开始显示出来,由于应用没有不是针对RAC系统专门开发的,所以rac cache fusion的代价非常大,在变化频繁的系统上,rac 的一系列wait event占据了大部分的系统等待时间,系统效率开始下降。同时当一个节点发生问题时而down掉时,另一个节点要恢复坏掉的节点的数据,在这个恢复阶段所有应用将hang住直到恢复完毕,通常在这个时间段里面前台的app服务器由于请求太多不能响应而挂掉,所以基本上在繁忙的系统上rac的平滑切换将很难实现,这也决定了我们后来从RAC退回到单节点数据库。

 

你在项目中岗位与贡献:

负责制定产品预算 负责产品选型沟通

参与制定测试用例 参与测试

负责San网络搭建 负责系统安装调试

负责存储规划 负责数据库建立

负责数据迁移 负责系统切换

负责后期维护 负责后期应用优化

sql审核,sql培训

 

 

 

 

 

项目二:dell linux serveribm p590系统迁移

项目简介(功能与用途):

项目发生在05年初,距离上次系统升级一年时间,在这一年时间里,公司业务飞速发展,日访问量从2000万次增长到8000万次以上,oracle rac在这急速增长的压力下也暴露出一些问题,由于rac cache fusion的内耗越来越严重,再对rac扩展节点的方案基本被否定,同时因为rac的维护成本比单节点数据库要高很多,所以我们定下来下一步方案要采用基于UNIX小型机的单节点数据库。系统设计容量要求要能支撑2亿次每天的访问量。

 

项目难点与解决方法:

和上一次升级一样,我们从硬件测试选型开始,这次我们选型了hp superdome Integrity服务器和IBM P590进行对比测试。和上次系统升级一样,我们的DBA,测试团队,JAVA架构师组成了一个特别测试组去hpibm的测试中心进行了对比测试,用我们自己的系统跑测试,最后对比下来IBMP590在高并发情况下机器的响应时间曲线比较平稳,同时由于AIX系统的很多自动化管理功能可以简化对主机的维护工作,我们最终选定了IBM P590做为新的数据库服务器。在存储方面,我们处于成本考虑并没有更换原先的存储,继续使用了EMC CLARiiON系列存储。由于我们在上一次系统升级后对所有rac数据库又建立了dataguard做备份数据库,这次升级我们把dataguard库的CLARiiON存储先行接到了P590上,然后在p590上建立oracle数据库,同上次系统升级一样,我们采用materialized view来同步数据,力求达到最短停机时间。同时我们调整了我们所有的监控脚本,保证了新系统的预警功能。另外我们建立了dataguard系统,保证了系统的可靠性。最终切换时间我们也控制在了每个数据库30分钟以内。

 

项目成功与失败的经验归纳:

P590系统上线后,我们的系统load6下降到1以下,另外我们使用了AIXLVM来管理磁盘,降低了很多原来使用linux raw device管理上的成本。

这是我们第一次使用基于UNIX的服务器,也是国内最早一批使用P590的用户,在系统上线相当长的一段时间内都保证了业务的可持续快速发展。在系统升级的实施方面由于有了上一次的经验,这次升级做到了更加平滑的切换,所有的监控脚本都经过测试运行,保证了新系统的预警。在这套系统跑了一段时间以后,主机端依然提供了非常强劲的功能,但是由于数据库的不断扩大,越来越多的i/o等待开始暴露出来,针对这个问题我们升级了主机的内存,加大了data buffer,同时为了保证系统的可扩展性,我们最终选用了sun 9990系列存储,基本上是系统实现了线性可扩。

 

你在项目中岗位与贡献:

负责制定产品预算

负责产品选型沟通

参与制定测试用例

参与测试

负责San网络搭建

负责存储规划

负责系统安装调试

负责数据库建立

负责数据迁移

负责系统切换

负责监控体系建立

负责后期维护

负责后期应用优化,sql审核,sql培训

 

 

 

 

 

项目三:淘宝网远程容灾站点,建立容灾数据库

项目简介(功能与用途):

在系统切换到了UNIX平台后,我们的关注点从性能开始转换到高可用性上,陆续建立了dataguardhacmp,提高了系统的高可用性。这个时候我们觉得应该考虑灾备,美国的911事件导致了很多公司一夜之间所有数据都消失无踪,对于我们这种对数据库依赖性极大的公司来说,数据就是生命,我们一定要做好灾难备份。处于成本和实施难度考虑,我们提出了整个灾备的过程分3部走的想法,首先建立一个最简单的容灾站点,可以保证数据不丢失,但灾备站点不提供对外服务。第二步,实现准实时不同城市间的复制,灾备站点不对外提供服务,但是碰到主站点灾难可以切换到灾备站点进行服务。第三步,准实时的多站点复制,灾备站点同时提供服务。

 

 

 

项目难点与解决方法:

由于实施第一步方案受限于预算和灾备机房的线路问题,我们把灾备站点定在本城市另一端的一个机房,通过裸光纤链路和主站点相连,采用了低于主站点的服务器配置,用了一台IBM P550服务器做为3个主库的dataguard,连接一台EMC CLARiiON存储,dataguard端一直处于恢复状态,实现在灾难时最多发生20分钟的的数据丢失。

 

 

 

 

 

项目成功与失败的经验归纳:

项目上线后数据同步良好,基本实现系统设计目标,以最小的成本构建了一套可用的灾备系统。

项目实施成本一直是私营企业最关注的,我们的所有项目都面临着把每一分钱花在刀刃上,所有的项目方案都由公司内部人员讨论得出,显示了团队的强大的战斗力。在我们以后的项目中,我们依然会追求以最小成本获得最大收益,我相信中国绝大部分公司都是中小企业,都将会面临到和我们一样的问题,我们走过的路,做过的项目是对他们最好的指导。

 

 

 

 

你在项目中岗位与贡献:

负责制定产品预算

负责产品选型沟通

负责San网络搭建

负责系统安装调试

负责存储规划

负责数据库建立

负责监控体系建立

负责后期维护

 

 

 

 

 
定义学生类覆盖Object中的方法实现Comparable接口 分数 20 作者 万静 单位 北京化工大学 定义一个学生类Student,成员变量包括:姓名,生日,学号,学校;重方法toString,equals,hashCode;实现接口Comparable,按照学号大小进行比较;定义构造方法。 代码形式如下: public class Main{ public static void main(String[] args) { Scanner in=new Scanner(System.in); int num=in.nextInt(); Student[] studentArray = new Student[num]; for(int i=0;i<num;i++) { String name=in.next(); int year=in.nextInt(); int month=in.nextInt(); int day=in.nextInt(); String studentId=in.next(); String school=in.next(); studentArray[i]=new Student(name,year,month,day,studentId,school); } Arrays.sort(studentArray); for(Student s:studentArray) System.out.println(s); } } class Student implements Comparable { //给出Student的定义 } 输入格式: 第一行输入学生人数。其他各行每行输入一个学生的姓名,出生年月日,学号,学号,用空格分隔。 输出格式: 按照学号从小到大排序的学生信息,每个学生信息一行。 输入样例: 例如: 3 李翔 2002 10 9 202019001 北京化工大学 张凯 2002 11 23 202019015 北京化工大学 汪海 2002 7 5 202019012 北京化工大学 输出样例: 例如: Student[name=李翔, birthday=2002-10-09, studentId=202019001, school=北京化工大学] Student[name=汪海, birthday=2002-07-05, studentId=202019012, school=北京化工大学] Student[name=张凯, birthday=2002-11-23, studentId=202019015, sc
06-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值