一直接触网校几年的时间。从技术开发到网校的运营感觉有自己的一套理解。
在线教育平台搭建技术是一方面,对如何运营,如何搭建适合很多公司他们自己的网校这个更重要。不需要多牛逼,需要最适合。
小广告:268教育(268xue):http://www.268xue.com我们专做网校搭建平台,别喷哈。
写在前面的牢骚话:
越来越多的线下机构将目光投向在线教育网校,因为线下发展已经到一个瓶颈,而且越来越多的学员需要在网上学习。
如果线下的培训机构不及时改变观念,将来打败自己的不是别人,是自己。
我以前的老东家做的非常好,线下每年2个亿的流水,趁线下的优势在,大投入迅速的推出网校。
网校跟线下既是竞争又是合作。
宁愿自己的网校把自己的线下吃掉,也不要让别人的网校把自己的线下打垮!
做一个产品方面贴近用户的需求。根据用户的要求二次定制.优势再扩大化.
做技术的我们从技术角度看一下。网站的架构是否能达到市面网校的要求。欢迎各种拍砖。
一、网站架构定位:
1.针对网校数据,数据量不会很大,用户一般年内达到10W的网校就赚大发了。。
1年内达到千万级别的数据量就算很大了。
2.针对大公司数据量可能膨胀,做好数据扩展的准备。
二、网站的基本考虑点,以及基本的技术选型
1)Web前端系统
页面的静态化以及图片的托管。
一说静态化,可能都用到模版引擎。freemarker velocity.
针对网校的系统,商品页面不是重点。准备用nginx转发。做伪静态。用vanish缓存。
同时针对网校很多页面靠大图片累加的。图片最好是走CDN的。看公司的财力是否用了。小公司直接走自己的带宽了。
2)负载均衡系统.
只能采用软件了。硬件伤不起,不是政府。选择nginx
3)数据库集群系统
数据库采用mysql.压力大时可以增加服务器从库的数量。做好读写分离。
1主多从,从库读取时随机读取,此实现方案一、在musql端做,给应用1个虚拟IP。
可惜这个是运维做的,不了解细节。方案二:代码端实现读写的分离:
实现原理:自己写拦截器。拦截所有service,根据service的name来决定是读库还是写库操作。拦截器的目的是覆盖
获取数据库的key方法,项目连接数据库只要key改变,就是所有的数据库改变了。
伪代码:
if(写操作)return 写库的key
if(读操作)return 读库的list中随机返回1个key.
注意:spring提供了可以覆盖获取数据库key的方法。ibtais.mybatis.hibernate.jdbctemplate都可以用的。目前项目中只用到
ibtais、mybatis、jdbctemplate的实现。都是一样的。hibernate工作了几年一直没机会用到。不会用~
4)缓存系统
喜欢memcache。不是大的项目。别人所说的一致性哈希也用不到。
缓存需要多台的话 可以设置多台。自己代码实现这个不麻烦应该。网上很多。
至于ibatis,mybatis自带的缓存,本人感觉不是很实用于web架构的。只有1个应用的项目到时挺适合的,用着也方便。
5)针对项目中计数器,微博回复,文章浏览数,好友,粉丝等的实现。
memcache+redis两者配合。
6)代码实际技术选型:
1.MVC Framwork: SpringMVC3.0 Restful的风格越来越风行,试试丢掉复杂的struts2.
2.Layout :以前使用struts2时用tiles.配置太啰嗦了,SiteMesh2简洁方便,首选。
3.Javascript Library:jquery。没什么其他说的。
4.Cache :memcached 客户端Spymemcached,自己加下重试机制。
5.Security Framework: 业务不复杂Apache Shiro,针对用户需要自定义的。自己编写拦截器对URL进行权限拦截
6.JMS:ActiveMQ
7.Json:GSon
8.数据库:mysql.NoSql:redis