微信、京东、知乎等知名公司【UI设计规范】-演道网

一个合格的产品想长久做下去一定会有自己的设计规范,设计规范是保证项目统一化进行的基本原则。设计规范有利于多人协作也有利于设计的统一性。在工作中我们也经常要去制定设计规范从而让项目得以沉淀。下面我收藏了一些各大公司的设计规范,在设计过程中大家可以参考一下~

看不清楚怎么办?可以在MICU设计微信公众号回复【28】下载高清大图

看不清楚怎么办?

在MICU设计微信公众号回复【28】下载高清大图

长按关注  与MICU一起成长!


—————— 本周热文 ——————

看完这些照片,感觉自己“出轨”了!

苹果官网改版,满屏都是豪气的中国风!

微信小程序设计规范(设计必备)

玩字体设计不仅拿下了嘎纳奖,还推动了立法!

包装设计我只服椰树牌,绝对是饮料中的战斗机!

味全换新包装,让逛超市的人跪了!

2016年有哪些知名企业换了LOGO?(年度全集)

优酷更新LOGO,你造吗?

麦当劳哭了,新款咖啡杯被网友疯狂嘲讽……

气到老师飙泪的美术试卷都长啥样?

父母看不懂你的表情包是一种怎样的体验?

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

从零到百亿互联网金融架构发展史-演道网

回想起从公司成立敲出的第一行代码算起到现在也快三年了,平台的技术架构,技术体系也算是经历了四次比较重大的升级转化(目前第四代架构体系正在进行中),临近年底也想抽出时间来回顾一下,一个小公司从最开始的零交易到现在交易量超过百亿背后的技术变迁。

总体介绍

在互联网金融行业一百多亿其实也算不上大平台,也就是二级阵营吧,其实每次的架构升级都是随着业务重大推进而伴随的,在前一代系统架构上遇到的问题,业务开发过程中积累一些优秀的开发案例,在下一代系统开发中就会大力推进架构升级。一方面可以平滑过度,一方面公司资源可以大力支持,同时技术的小伙伴们可以使用到前沿的技术,更有开发的成就感,就这样我们大概也就是9个月就行系统架构一次升级,就到了我们现在的这套架构中。

很多网友经常会问,你们平台的TPS是多少呀,最大并发是多少呀,性能怎么样,说实话我们是一个小公司,最夸张也就上万人同时抢标,但是做为一个中型的互联网金融平台要做的事情也真的不少,远远不只是这些参数可以说的清楚;我们也不是什么高大上的平台,使用的技术也是目前比较主流开源产品,但在公司不断发展的过程中也遇到了很多的问题,也尽量去使用比较主流的、开源的、适合我们的一些解决方案来构建整个系统,在这里分享平台发展背后技术换代的变化,同时希望和大家多做一些交流,多提一些建议。

我们进行了四次大的架构变化,每代架构都用一句话来总结:

  • 第一代架构特点:业务比较集中、功能满足投资理财需求、快速上线
  • 第二代架构特点;分布式系统改造,平台化初具规模,各项垂直业务系统搭建上线、产品端极大丰富用户投资、大数据平台研究并使用
  • 第三代架构特点;SOA治理,使用zookeeper作为注册中心,dubbo做监控和调度中心;cas实现单点登录,使用shiro做权限控制
  • 第四代架构特点;全面启用微服务开发模式,springboot+springcloud技术桟做为第四代架构技术支撑

下面做详细介绍

第一代系统架构

2014年应该算是互联网金融元年,在之前其实已经有很多互联网公司用着各种模式在生存,一直不温不火,但是到2014年突然火爆了起来,首先是网贷之家,网贷天眼这种第三方网站流量突然增加,接着是媒体报道不断跟进,再后来就报出各种互联网金融公司获得XXX美元投资的报道越来越多,政策也慢慢明朗,于是很多大型公司(集团)也就趁着这股热潮跟进,其中就包括我们。

第一代系统最主要就是抢时间,公司希望用最短的时间内保证系统上线,那时候移动浪潮已经启动,于是决定优先上线移动端,网站可以暂不考虑。公司当时有PHP和Java两种开发语言技术储备,因为PHP在快速开发上面有着非常大的优势,因此决定采用前端PHP+后端Java这种模式。系统分成了三层:用户层:安卓和IOS移动端;接口层:php提供用户和交易接口;后端:后端有两部分,后台和定时系统。后台用PHP开发和接口层公用了一个系统,另一个是定时系统,负责计息、派息、到期等定时任务等使用了java开发。

基础服务和中间件,mysql做了最基本的主从来支持,第一代系统只是使用了mysql的主库,从库只是同步备份;memcached用来处理用户抢标的并发问题,也只用了这一块;ActiveMQ用来使用二级市场的转让撮合以及其它一些异步消息通知。项目部署:php使用apache部署,定时服务使用tomcat6来做应用服务器,使用lvs来做前端apache的负载,基本上第一代也就这些技术了,下面是第一代系统的架构图。

第一代系统上线之后,网站和H5(手机浏览器或者微信端)系统建设就变的特别突出,作为一个互联网金融公司没有官网不能忍,于是又开始马不停蹄的开始开发网站和H5系统,在这个期间PHP之前做的后台这块摘了出来,用java从新规划了一版,至此PHP就负责了网站、APP接口、H5这三个系统,三个系统共用的一个核心交易,java这边负责后台管理和定时服务,我们一般给这个架构叫做1.1代架构。

第1.1代系统架构图,绿色部分为变动部分

第一代系统的缺点是业务过于集中,仓促上线,后期问题较多

第二代系统架构

第二代系统的背景是随着公司业务量的快速发展,很多初期所欠的技术债务统统爆发,线上出现了很多问题,最严重的一次是给个别用户重复派息,各种被骂,现在记忆犹新。另一方各业务部门需求不断,公司产品需求不断,所以这个阶段就是忙着修复各种生产问题,一边还需要开发垂直业务系统。那段时间差点被逼疯了,第一代系统是封闭开发,回来还没缓过劲,这边又赶马上架,真是疼并快乐着。

第一个垂直子系统上线的是:合同系统,当时用户投标后没有一个合同,很多用户很不放心,就把优先级提到了前面。后来就单合同系统就改了三个版本,第一个版本只是生成pdf,第二阶段上线电子签章,第三个阶段加水印,自定义动态生成pdf;紧接着开发积分系统:用户邀请,投资等生产积分,用来兑换抵现卷等;抽离出消息系统:站内消息、短信、邮件等;上线监控系统、业务监控和服务监控,业务失败预警;各业务部门继续不断提需求,上线财务系统:财务人员统计核算金额;风控系统:监控异常用户,异常交易;给销售开发了销售系统;因为和很多第三方系统对接,又开发了对外接入系统。

一代系统做的很赶,产品界面又很烂,随即启动规划了网站2.0、APP2.0、H52.0,针对前端系统的需求,在后端开发了CMS系统来发布项目、公司的公告新闻等;第二代产品端普遍规划了很多大数据分析的一些需求,会在官网展示全量数据分析后投资偏好、投资的金额都跑到哪里去,前端用地图来展示,对于个人也会有还款日历,代收数据分析等,因为需要跑全量数据,在规划的时候都是设计离线来处理,将数据从mysql从库同步到mongodb的集群中,利用mongdo的mapreduce技术来处理大量的数据,于是我们的数据库层就变成下面的这个架构

mysql实时同步到mongodb,我们使用的是tungsten-relicator这个工具,会在mysql服务器端启动一个监控agent,实时监控mysql的binlog日志,同时在mongodb的服务器端也起了一个服务端,agent监控到数据变化后传送给服务端,服务端解析后插入到mongodb集群中以达到实时同步的效果,如上图,当初写了一篇文章来介绍:大数据实践-数据同步篇tungsten-relicator(mysql->mongo),其实这个工具在使用中,也不是特别的稳定,但是当初的选择方案并不多,幸好后期慢慢的熟悉后算是稳定了下来。

数据清洗系统我们大胆的使用了golang来开发,当时使用的golang版本是1.3吧,现在都1.8了,以前也是没有接触过也是锻炼了队伍,好在golang语言本身非常简洁和高效,虽然踩了N多坑,但是最终我们还是按时投产了;后来又使用了golang开发了一个后台,是在beego框架的基础上来做的。大数据分析系统后来又升级了一代,在前端的各业务系统,UI用户层做了很多埋点来收集用户数据,通过activeMQ传输接收最后存储到mongodb,在进行数据清洗,将清洗后的结果存入到结果库中,供前端业务系统使用;后来利用beego+echart重新做了一版数据分析系统。

大数据系统的架构图

因为后端数据库的压力不断增大,后端管理系统、业务系统均作了主从分离;后台管理系统增加缓存,启动了redis做缓存;使用nginx搭建了独立的图片服务器;第二代系统开发过程中,也是公司发展最快的阶段,上线了N多的活动。

第二代系统架构图:

稍等总结一下:
第二代架构上线了各业务系统,做了主从分离,搭建了大数据平台为以后更多的数据处理提供了技术基础
缺点:各业务系统切分之后,各项目之间调用复杂;后台系统繁多、各系统之间有单独的账户系统,运营需要来回切换完成平台运营监控

第三代系统架构

第二代系统开发完成之后,留给我们了三个问题很痛苦,第一个是随着业务系统不断增多,系统之间的调用关系成指数级别上涨,在第三代系统初期,我们又开发了很多基础组件,更是加剧了这个问题;第二个问题和第一个问题相辅相成,系统之间调用关系太多,如果移动其中一个子系统,可能需要修改关联系统的配置文件,重新启动服务,经常因为更新一个系统,其它系统也需要被动更新,投产和出问题切换很复杂;第三个问题是我们开发了很多的后台系统,但是账户没有统一,每个子系统有各自的账户中心,运营和业务人员需要来回登录才能完成日常工作,随着业务量增大这个问题也日益突出。

于是又开启调研、系统选型等,解决第一个问题就是引入SOA服务治理,通过服务的注册和发现解决系统之间的解耦,当时考察了很多,最后选型dubbo,原因无它,有大量群众使用基础该趟的水的趟过了。解决第二个问题就是引入配置中心,当时调研了360的Qihoo360/QConf、Spring的spring-cloud-config、淘宝 的diamond、还有百度的disconf,最后纠结半天选定了disconf,完美和spring cloud擦肩而过,但是正是从这里开始让我们注意到了spring-cloud、Spring-boot为第四代的架构选型做了基础,其实最后disconf也只是在少部分项目使用,也没完全推广开;解决第三个问题就是账户中心,使用了cas实现单点登录,shiro做权限控制,dubbo来提供登录后权限列表等服务端接口。

改造后的架构图

在这个基础上面,我们又抽离出来很多基础组件,comomn组件处理共用的基础类,包含字符类、日期类、加密类….,搭建了fastDFS集群来处理文件系统,做了redis集群的测试;单独开发了定时调度系统,将所有的定时任务统一集成到调度系统,那个系统需要定时任务都可以在页面自动添加调度策略;前端PHP做了系统改造,主从分离、静态优化等

在后来,公司又启动众筹平台的建设,这次系统完全采用java语言开发,app端采用混合开发模式,其中APP的所有一级页面全部采用原生开发,所有的二级页面都是H5+vue这种模式,后端全部采用dubbo做服务化,最终的架构如下:

图里面系统只罗列一部分,使用其它服务来代替

第三代系统启动了SOA服务治理,引入统一账户中心、基础组件;缺点是开发环境较复杂

第四代系统架构

人总是不满足,技术呢也总是希望可以使用最好架构体系,在三代系统架构的开发中,了解到了spring cloud和spring boot,在不断的学习之后,越发的感觉到springboot的便利性,快速开发的优点甚是喜爱,spring cloud体系也完全满足一个大型系统需要考虑的方方面面,微服务的概念不断的被提出来,以上为技术背景;另一方面国家开始严格要求P2P公司必须与银行存管,分析了银行的相关接口后发现如果严格按照规则走,我们的系统需要大改造,同时公司为了满足监管要求,又开发出白条相关产品也是一个大项目,趁着以上的两个背景,我们决定在进行银行存管和白条项目的同时全面拥抱微服务。

至于为什么我们要抛弃dubbo转而全面拥抱spring cloud原因有三,1、dubbo多年都没有更新了,spring cloud不断的在更新升级;2、dubbo主要做服务治理和监控,spring cloud几乎考虑了微服务所需要方方面面,比如统一配置中心、路由中心;3、spring cloud更是无侵并且完美和spring其它项目整合,开发效率更高。

既然选定了使用spring boot+spring cloud来改造,微服务技术选型这边就定了下来,那么如何开启改造呢,毕竟在进行新一代系统改造的同时也不能影响原有业务,其中最主要的问题就是最初的系统虽然都是按照分布式的开发模式来进行,由于老系统的原因有的系统还是共用了一个数据库,微服务要求每个独立的子系统有自己独立的库操作,别的系统如果需要修改或者查询子系统的数据,需要根据服务间接口调用来获取。因此计划先从新开发的项目和需要改造的项目中启用springcloud项目,别的系统暂时先通过路由器模式来通讯,最终的系统架构图如下:

在架构的这条路上面没有终点,变化就是永远的不变,架构的升级更是为了更好的支撑业务,二者相辅相成。

开源软件

在这几年中我们也想对开源世界做一点点贡献,总共开源了两个软件:

generator-web

在项目中大量使用了mybaits,我们对mybaits的generator做了改造,并且做了一个系统界面,方便根据相关参数自动生产相关代码(只需要设计好表结构,系统会自动生成mappper、Entity、dao层的代码),最后也开源了出来

generator-web

界面如下:

云收藏

为了锻炼技术学习springboot我们开发了一个云收藏的开源软件,使用的技术主要是springboot/Spring data jpa/redis/thymeleaf/gradle,功能主要是可以帮助用户在云端收藏、分享和整理自己的收藏夹。

favorites-web

favorites_chrome


作者:纯洁的微笑
出处:http://www.ityouknow.com/
版权所有,欢迎保留原文链接进行转载:)


转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

春节学习不打烊,我们“惠”陪你到ji年-演道网

守望是万家灯火,相逢是知识交错。新春将至,龙果学院全体成员祝各位码友新年快乐,万事如意!

即日起龙果学院将推出春节学习不打烊活动,学院部分课程下单最高即可享受立减400元。

立减一

《微服务架构的分布式事务解决方案》下单立减400,只需999

face/ebMBhxFxhcAx2yDnmWdzEwMFY6iez5YS.jpg

立减二

《分布式架构课程-组合套餐》下单立减300,只需1399

face/HNJSffi6aCck5CnSYyicdC486ejPEhTk.jpg

立减三

《基于Dubbo的分布式系统架构实战》下单立减300,只需599

face/x8CSPTcFfCKphWta3wGxjbPDdpTnjE5H.jpg

立减四

Spring Boot 教程全集》下单立减40,只需159

face/4BPXinZdZ4xWctkSFnXTH4CNMPyFN7dc.jpg

立减五

《SSM框架实战应用教程(web开发篇)》下单立减50,只需149

face/YnbsTpzJtMQBKb43keBKQaWHFcFr4eDG.jpg

立减六

《日志分析之 ELK stack 实战》下单立减40,只需159

face/Crb4JWWxpiRkGss5SbyjWXhesfSMByXh.jpg

立减六

《如何成为优秀的产品经理-3周就行》下单立减60,只需139

face/rGYEnjd7ySsnjQR3rnQ3HaZN4TeDQBKQ.jpg

立减七

《VMWare虚拟化技术实战-组合套餐》下单立减30,只需109

face/j3ryXCHhZHJwxtxHZCA2MCkkDytrctWn.jpg

优惠不断,我们春节不打烊,一直“惠”陪你过完这个ji年春节

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

免费API 接口罗列,再也不愁没有服务器开发不了APP了(下)-演道网

APIStore由百度出品,是一个连接服务商与开发者的第三方API分发平台

,下面就罗列百度 api集市免费接口。
IP地址查询 

http://apistore.baidu.com/apiworks/servicedetail/114.html
频道新闻API_易源 

http://apistore.baidu.com/apiworks/servicedetail/688.html
微信热门精选

 http://apistore.baidu.com/apiworks/servicedetail/632.html
天气查询 

http://apistore.baidu.com/apiworks/servicedetail/112.html
中国和世界天气预报 

http://apistore.baidu.com/apiworks/servicedetail/478.html
股票查询 

http://apistore.baidu.com/apiworks/servicedetail/115.html
身份证查询

http://apistore.baidu.com/apiworks/servicedetail/113.html
美女图片

 http://apistore.baidu.com/apiworks/servicedetail/720.html
音乐搜索

 http://apistore.baidu.com/apiworks/servicedetail/1020.html
图灵机器人

 http://apistore.baidu.com/apiworks/servicedetail/736.html
汇率转换 

http://apistore.baidu.com/apiworks/servicedetail/119.html
节假日 

http://apistore.baidu.com/apiworks/servicedetail/1116.html
pullword在线分词服务

http://apistore.baidu.com/apiworks/servicedetail/143.html
去哪儿网火车票 

http://apistore.baidu.com/apiworks/servicedetail/697.html
笑话大全 

http://apistore.baidu.com/apiworks/servicedetail/864.html
银行卡查询服务

 http://apistore.baidu.com/apiworks/servicedetail/735.html
语音合成

 http://apistore.baidu.com/apiworks/servicedetail/867.html
宅言API-动漫台词接口

 http://apistore.baidu.com/apiworks/servicedetail/446.html
去哪儿景点门票查询

 http://apistore.baidu.com/apiworks/servicedetail/140.html
手机号码归属地 

http://apistore.baidu.com/apiworks/servicedetail/794.html
体育新闻 

http://apistore.baidu.com/apiworks/servicedetail/711.html
手机归属地查询

http://apistore.baidu.com/apiworks/servicedetail/709.html
科技新闻 

http://apistore.baidu.com/apiworks/servicedetail/1061.html
空气质量指数 

http://apistore.baidu.com/apiworks/servicedetail/116.html
天狗健康菜谱

 http://apistore.baidu.com/apiworks/servicedetail/987.html
热门游记列表

 http://apistore.baidu.com/apiworks/servicedetail/520.html
天狗药品查询

 http://apistore.baidu.com/apiworks/servicedetail/916.html
汉字转拼音 

http://apistore.baidu.com/apiworks/servicedetail/1124.html
国际新闻 

http://apistore.baidu.com/apiworks/servicedetail/823.html
彩票

 http://apistore.baidu.com/apiworks/servicedetail/164.html
微信精选 

http://apistore.baidu.com/apiworks/servicedetail/863.html
天狗健康资讯

 http://apistore.baidu.com/apiworks/servicedetail/888.html
兴趣点检索 

http://apistore.baidu.com/apiworks/servicedetail/182.html
用药参考

 http://apistore.baidu.com/apiworks/servicedetail/754.html
天狗健康知识

 http://apistore.baidu.com/apiworks/servicedetail/899.html
奇闻趣事

 http://apistore.baidu.com/apiworks/servicedetail/633.html
花边新闻 

http://apistore.baidu.com/apiworks/servicedetail/768.html
天狗医院大全 

http://apistore.baidu.com/apiworks/servicedetail/988.html
生活健康

 http://apistore.baidu.com/apiworks/servicedetail/989.html

Android订阅是探讨Android开发的公众号,分享最有价值的Android干货文章

欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

2016十大手机移动安全隐患-演道网

2016年,移动设备蓬勃发展的一年,同时也是安全隐患频发的一年。据悉,2016年,iOS和Android手持设备呈现全年稳步增长的趋势,相比之下,桌面操作系统呈现整体占有率下降的趋势。事实上,根据Marketing Land的报告显示,截止10月底,全球移动互联网的使用率已经超过桌面系统使用率,预计到2018年,移动互联网的使用率将占据80%。

istock-508914842.jpeg

但是,与其他科技因素一样,广泛使用的背后必然引发更加广泛的威胁,移动设备安全也不例外。以下为2016年10大移动安全风险,以及相应的安全解决方案,希望可以助你有效的抵御威胁,保护自身设备安全。

威胁一:不安全的设备

这是一个非常重要的问题,而且很不幸,这个问题已经困扰了我们很多年。根据今年1月份的报告显示,只有1/3的Android用户使用密码锁屏。Apple用户表现的显然要更好些,根据The Verge今年4月份的统计显示,约89%的iPhone用户使用TouchID 或密码锁屏。

移动设备缺乏密码来验证和控制用户对存储在其中的数据进行访问,可谓是一大安全隐患。如今,许多设备都已经具备各种技术能力,包括支持密码、个人识别码(PIN)认证,以及扫描的指纹进行身份验证的生物识别读卡器技术等。不过,调查显示,消费者很少使用这些认证机制。即使使用密码或PIN,他们往往也只会选择一些很简单的密码,如123456或000000等。事实上,如果没有密码或PIN锁定装置,将会增加被盗或丢失的手机设备信息泄漏的风险,攻击者就可以轻易地访问或使用未经授权的用户敏感信息。

解决方案:

使用复杂的密码(你的出生日期或街道号码绝对是很糟糕的选择)以及在设备上加密可以很大程度地降低数据被盗风险。对储存敏感数据的可移动micro-SD卡进行加密更是必不可少的防范举措。

威胁二:缺乏合适的移动设备管理解决方案

对企业而言,使用移动设备管理解决方案来增强移动设备用户的安全性是大有裨益的,特别是配置合适的BYOD移动办公解决方案。

例如,Microsoft Exchange Server就配置选项来组织未经授权的设备连接到用户邮箱中,需要密码验证以及可以远程清除丢失或被盗手机设备中的数据。

其他的第三方解决方案还可以实现一些更为细致的功能,如设置应用程序白名单和黑名单、启动反恶意软件保护程序、执行加密操作、启用或禁用各种设备功能(比如相机),总体而言,这些安全解决方案会为设备提供一个良好的标准化设置。

用户设备中还包含一些可用的管理选项,例如,苹果和Android都会提供一个“寻找我的设备”这一功能来寻找丢失的手机,此外还可以远程删除丢失设备中的数据等。

解决方案:

如果你的企业还没有配置移动设备解决方案,现在开始进行研究,选择一款最合适的产品来保护企业的数据安全吧。

威胁三:应用程序请求太多权限

每次安装新的应用程序时,你是否总会发现这样一些请求,如请求访问你的联系人或你的位置信息等。试想一下,如果你只是简单的安装一个手电筒应用,还请求访问你的联系人或地址信息会不会很引人怀疑?

但是不幸的是,我们所有人几乎每天都要淹没在“你是否确定这么做”的提示消息中,你不得不选择“是的”或“OK”才能继续你正在做的事情。通常我们总是单纯的以为,只要点击“YES”提示就不会再出现,于是应用程序恶意软件就这样一次次利用我们的不耐烦和自以为是的情绪,倾巢而入危及我们的设备。

解决方案:

所以,每次面对各种“访问请求”一定要仔细慎重,不必要的情况下千万不要授予任何应用程序任何敏感权限,勿让恶意软件有可乘之机。

威胁四:过时的应用程序 

一旦攻击者寻找到可用的代码,过时的应用程序就是成为安全炸弹。第三方应用程序的安全补丁并不总是能够及时地开发和发布出来。另外,手机中的第三方应用程序,包括Web浏览器,每当有可用的更新程序时也一般不会告知消费者。和传统的Web浏览器一样,手机浏览器很少会得到更新。使用过时的软件,攻击者可以利用与这些设备相关的漏洞,由此增加了设备的风险等级。

解决方案:

应用程序必须保持更新,及时卸载过时的程序。此外,还需要定期进行杀毒处理,查杀应用程序中存在的安全漏洞。

威胁五:虚假的应用程序商店

移动安全领域机构发布报告称,在420646款Google Play中上架的应用,发现其中有5077款为“假冒伪劣应用”,这些应用伪装成如Facebook、Twitter之类的著名应用,用户不小心安装后,它们会窃取用户的个人隐私,例如浏览器浏览记录、通讯录等,或者向用户推送广告骚扰。

安全软件公司趋势科技进行的一项研究,也发现近90万假冒的Android应用程序。这些假冒应用程序,旨在欺骗用户窃取用户数据,并向客户手机强行推送广告。

解决方案:

如今,假冒应用程序日益泛滥,用户安全隐患增加。手机用户还需提高自己的安全意识,要选择在应用官网或正规的应用商店下载APP。

威胁六:移动设备可能有未经授权的修改 

修改移动装置,以消除其局限性,让消费者能够增加新的功能(称为“越狱”)。但是这一过程往往会降低设备的安全性,并可能增加设备的安全风险。越狱允许用户获得装置的访问权限,以便允许未授权的软件和应用程序运行。而在越狱的过程中,一些用户可能会关闭他们移动设备上安装的增强安全性能的设置,如防火墙等。

而一旦发生后一种情况,用户将面临更大的安全风险,因为攻击者可以在这个过程中安装恶意软件。此外,越狱的设备可能无法从制造商处获得安全更新的通知,无法保持软件更新。

解决方案:

安全专家通常并不建议root或越狱,但是选择越狱的话,我们还是可以通过一些简单的设置最大限度的降低这种安全隐患的,如关闭定位服务、设置自带浏览器的“不跟踪”等,限制未经授权的行为出现。

威胁七:移动设备可能含有恶意软件 

消费者可能在不知不觉中下载了恶意软件,因为它可以伪装成一个游戏、安全补丁、实用工具或其他有用的应用程序。一般而言,普通用户很难区分一个合法的应用程序和一个包含恶意软件。例如,一个应用程序可能会重新包装的恶意软件,消费者可能会不小心下载到移动设备上,数据可以很容易被截获。

此外,许多移动设备并没有预先安装安全软件,以防止这些恶意程序,间谍软件和恶意软件的攻击。他们不安装安全软件的部分原因是因为移动设备往往进行安全软件预装。虽然这种软件可能会影响操作,但如果不安装安全软件,攻击者可以成功地散布恶意软件,如病毒,木马,间谍软件,垃圾邮件,引诱用户透露密码或其他机密信息。

解决方案:

应用程序和操作系统应该保持更新,最大程度的降低漏洞利用的可能,保护设备安全。此外,安全专家还建议在移动设备中运行安全软件,抵抗恶意程序。

威胁八:僵尸网络 

万物互联时代,僵尸网络正在经历一次重大的进化,从PC向手机等移动设备甚至智能设备蔓延。近年来,移动僵尸网络更是成为移动通信和网络安全的最大威胁。

2014年年初,曾发生过史上首个物联网僵尸网络,也是信息安全界首次记录到有智能电器等物联网终端设备参与的僵尸网络攻击。

后来,美国安全公司IntelCrawler发现了一个由被入侵的商家POS机组成的一个庞大的僵尸网络,该僵尸网络包含涉及36个国家的1500个受感染POS和其他零售系统。

在物联网僵尸网络中,以Android智能手机为主要载体的僵尸网络发展最为迅猛,2013年年底,安全公司FireEye发现了一个在韩国流行但指令控制中心位于中国的Android僵尸网络MisoSMS,是当时发现的最大移动僵尸网络。

据悉,2014年统计数据显示:手机流量“行迹可疑”,14%被确认为来自僵尸网络。多家媒体报道称,相当大一部分网络广告流量来自僵尸网络,每年造成的虚假点击价值4亿美元。40%的验证码流量包含可疑行为,其中29%来自僵尸网络,而这一数据正在逐步攀升。

解决方案:

针对移动设备安全的研究还不充分,依然缺乏高效的安全解决方案。因此,提供有效的数据以了解和分析移动僵尸网络,对于移动设备的安全和隐私来说至关重要。此外还可以推荐大家一款名为“VirusTotal”的病毒扫描引擎,可以用来检测你手机设备中的恶意软件,它可以免费使用,还适用于浏览器或Android 和iOS应用程序。

威胁九:修复系统可能是废弃的 

移动设备操作系统的安全补丁或修复程序不一定会及时安装在移动设备上。可能需要几周—几个月的安全更新周期才能提供给消费者进行更新。

根据不同性质的漏洞,打补丁的过程也是纷繁复杂的,可能涉及到很多人和操作环节。而一旦制造商完成了更新,它还需要由每个运营商进行测试,随后更新传递到消费者的设备上。

此外,超过两年的移动设备可能无法接收安全更新,因为制造商可能不再支持这些设备。许多制造商在12个月至18个月后可能停止支持智能手机补丁更新。

解决方案:

有条件的话可以及时更换设备

威胁十:没有限制网络连接

许多移动设备没有防火墙来限制连接,当设备被连接到广域网络时,它可以使用通信端口与其他设备和互联网连接。而黑客也可以通过一个不固定的端口来访问移动设备。防火墙可以保护这些端口,并允许用户选择移动设备进入网络。如果没有防火墙,移动设备可以通过一个不安全的通讯端口进入网络,而入侵者也可以由此获取和滥用设备的敏感信息。

此外,使用不安全的公共无线互联网络或WiFi点,可能会造成重大安全隐患,可能允许攻击者连接到该设备,并查看敏感信息,如密码、信用卡数据等。

解决方案:

启用防火墙是移动安全的第一道防护栏,此外,不建议私人设备连接公共无线网络,即使万不得已使用共用网络也最好不要进行任何交易,不轻易输入登录凭证等敏感信息。最好是使用虚拟专用网络或自己的WIFI热点以及其他安全方式访问网络。

本文来自(嘶吼

更多关于安全、加密、软件发布相关资讯和产品推荐>>>

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

基于Redis的Session共享示例-演道网

在单机情况下,Session可由部署在服务器上的Web容器来管理 (如Tomcat、JBoss)。

在负载均衡的集群环境下,负载均衡可能将请求分发到不同的服务器上去,在这种情况,需要将有状态的session统一管理起来。

本文将给出一个简单的示例,将session存放到Redis统一管理。因为只是一个示例,所以Nginx只用1台,Tomcat使用2台,Redis一个或者简单的主从。

face/b6QXmcW8PKbiHAetwbhHxFTAjabtTyNH.png

环境准备

准备Redis

下载redis-3.2.3.tar.gz (Redis.io下载)

解压缩redis

 tar -zvxf redis-3.2.3.tar.gz

face/QRArx8MGRhxaAPbric8xmJ3aAizhr6df.png 

将解压缩后的redis文件名改成好记点的6379 (可以不重命名)。

然后使用make && make install 完成安装。

[root@dev18 redis]# mv redis-3.2.3 6379
[root@dev18 redis]# cd 6379
[root@dev18 6379]# make && make install

安装成功之后,出现如下显示:

face/cmEWa83FJRhEr2WZYWsQN7WppnSZQZwz.png

因为本版本使用的Redis版本是3.2.3, 在这个版本中,有protected mode的属性(默认是yes),进入6379目录,修改redis.conf配置文件。从而,其它网段的程序可以去访问,否则可能会出现如下的错误。

Exception in thread "main" redis.clients.jedis.exceptions.JedisDataException: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside. 
        at redis.clients.jedis.Protocol.processError(Protocol.java:117)
    at redis.clients.jedis.Protocol.process(Protocol.java:151)  
        at redis.clients.jedis.Protocol.read(Protocol.java:205) 
        at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:297)   
        at redis.clients.jedis.Connection.getIntegerReply(Connection.java:222)  
        at redis.clients.jedis.Jedis.sadd(Jedis.java:1057)  
        at jedis.example.Main.main(Main.java:36)

face/WQFKAHaKZXBH3C6NQAxSakGQzYQ36iRx.png

修改后保存。

face/K334YKCnjtjMMErGHmRekzkDtsXB5SDS.png

进入src目录,启动Redis服务

[root@dev18 6379]# cd src
[root@dev18 src]# ./redis-server

成功启动显示如下:

[root@dev18 src]# ./redis-server
10051:C 22 Dec 09:50:59.653 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.3 (00000000/0) 64 bit
  .-`` .-```.  ```/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 10051
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               
              
10051:M 22 Dec 09:50:59.656 # Server started, Redis version 3.2.3
10051:M 22 Dec 09:50:59.656 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
10051:M 22 Dec 09:50:59.656 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
10051:M 22 Dec 09:50:59.656 * The server is now ready to accept connections on port 6379

准备Tomcat

下载tomcat,并解压缩为两个tomcat,并修改各自server.xml中的端口,保证两者不冲突。

face/PSPZsb87DbChf48Qh5JfihQNCaQsPdFi.png

本示例中,tomcat_1的端口为8082

    

tomcat_2的端口为8083

    

准备Session-Manager

大家可以通过如下路径获取Session-Manager的jar包和相关的依赖包,包括common-pool2和Jedis。

https://pan.baidu.com/s/1geZVozx

face/FXmmAAQK474NRDmkyCeKNTrs5ZyXE6f5.png

下载好之后,我们首先将这三个jar包,放到Tomcat目录下的lib文件夹中。

配置Context.xml,添加如下内容,具体的host和port由自己的环境决定。

     
    

然后准备一个项目,为了方便,我直接将测试的war中的文件替换了

Tomcat_Home/webapps中的ROOT的内容。也可以通过tomcat自带的examples示例来测试session。

如:http://localhost:8082/examples/servlets/servlet/SessionExample

face/Zen8mJnS8ndsZrPZdm7kkR4stSGxBDEa.png

至此,两个测试的tomat就准备好了,并且已经配置了session管理,由redis来存储。接下来,我们就需要一个Nginx用于负载,配置两个tomcat的信息即可。

准备Nginx

下载Nginx,解压,然后进入Nginx的conf目录,修改nginx.conf文件内容,找到http的部分,添加upstream,就是我们上述提到的两个tomcat。

http { 
        upstream tomcat  {  
            server localhost:8082;  
            server localhost:8083;  
    }

本文Nginx的端口为8899, 自己设定了一个。

 server {        
        listen       8899;

face/MzJxcEbAT6RKeYAyyDEfTiiR2DQGi2HY.png

至此Nginx, Tomcat, Session-Manager, Redis相关的环境就全部准备好了。

接下来,要做的就是启动Nginx, Tomcat, Redis,来看看 session是否存入到Redis中,自己的Web工程能不能正常运行等。

启动Nginx和Tomcat

进入NGINX_HOME/使用 nginx命令启动Nginx服务器。

face/pKx3FbmibbfsNmYJrC8wcnNwWQcGtHAX.png

进入两个tomcat_1和tomcat_2,分别启动tomcat。登录自己在ROOT中放置的WEB工程,可以看到session在Redis中存储下来了。

通过Redis-Desktop Manager查看Redis中session的信息。

face/bDdhkRCnzRY8ssJdjdSyrssXtzKWbE6H.png

配置一个Redis从服务器

通过Redis-Desktop Manager查看Redis中session的信息。

为上面的6379主服务器配置一个从服务器6380。

在6380的redis.conf中指定 是6379的slave,如:

slaveof 127.0.0.1 6379

启动从服务器:

[root@dev18 src]# ./redis-server ../redis.conf 
                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.3 (00000000/0) 64 bit
  .-`` .-```.  ```/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6380
 |    `-._   `._    /     _.-'    |     PID: 14302
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                              
              
              
 14302:S 22 Dec 12:02:55.810 # Server started, Redis version 3.2.3
 14302:S 22 Dec 12:02:55.810 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
 14302:S 22 Dec 12:02:55.810 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
 14302:S 22 Dec 12:02:55.810 * The server is now ready to accept connections on port 6380
 14302:S 22 Dec 12:02:55.810 * Connecting to MASTER 127.0.0.1:6379
 14302:S 22 Dec 12:02:55.810 * MASTER <-> SLAVE sync started
 14302:S 22 Dec 12:02:55.810 * Non blocking connect for SYNC fired the event.
 14302:S 22 Dec 12:02:55.811 * Master replied to PING, replication can continue...
 14302:S 22 Dec 12:02:55.811 * Partial resynchronization not possible (no cached master)
 14302:S 22 Dec 12:02:55.815 * Full resync from master: c5038d1cbe197bbd8c8fee0e719370eac42bd6bc:1
 14302:S 22 Dec 12:02:55.865 * MASTER <-> SLAVE sync: receiving 2741 bytes from master
 14302:S 22 Dec 12:02:55.865 * MASTER <-> SLAVE sync: Flushing old data
 14302:S 22 Dec 12:02:55.865 * MASTER <-> SLAVE sync: Loading DB in memory
 14302:S 22 Dec 12:02:55.866 * MASTER <-> SLAVE sync: Finished with success

使用Redis-Desktop Manager

face/BDCzTWS38nywpnFFyXSHCC7hja6rfaxf.png

可以看到,主服务6379和从服务6380都包含session的相关信息。

文章转自:https://my.oschina.net/wangmengjun/blog/810179

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

Spring Boot基础教程8-web应用开发-模板引擎jsp-演道网

一.spring boot的web应用开发,是基于spring mvc

 

二.Spring boot 在spring默认基础上,自动配置添加了以下特性:

1.   包含了ContentNegotiatingViewResolver和BeanNameViewResolver beans。

2.   对静态资源的支持,包括对WebJars的支持。

3.   自动注册Converter,GenericConverter,Formatter beans。

4.   对HttpMessageConverters的支持。

5.   自动注册MessageCodeResolver。

6.   对静态index.html的支持。

7.   对自定义Favicon的支持。

8.   主动使用ConfigurableWebBindingInitializer bean

 

三.模板引擎的选择

FreeMarker

Thymeleaf

Velocity (1.4版本之后弃用,Spring Framework 4.3版本之后弃用)

Groovy

Mustache

注:jsp应该尽量避免使用,原因如下:

1.   jsp只能打包为:war格式,不支持jar格式,只能在标准的容器里面跑(tomcat,jetty都可以)

2.   内嵌的Jetty目前不支持JSPs

3.   Undertow不支持jsps

4.   jsp自定义错误页面不能覆盖spring boot 默认的错误页面

 

四.Jsp Demo

       

        

            

            

            

        

        

            

            

        

    添加配置参数:

spring.mvc.view.prefix: /WEB-INF/templates/

spring.mvc.view.suffix: .jsp

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

JavaScript新知:service workers -演道网

前端技术正在像桌面技术靠近,其中一项很重要的就是就是service workers,它让HTML App离线工作成为可能。本文会以一个简单的案例代码来说明这项技术。
我使用的工具:

  1. 浏览器版本为chrome 55

  2. 服务器系统:Node 5.0

我们需要准备3个文件:

touch  index.html b.html sw.js

其中文件index.html内容为:

    

它注册一个service worker,文件名为sw.js,一个JavaScript代码文件。所以真正关键的文件是sw.js,其内容为:

    const cacheName = 'v1::static';
    self.addEventListener('install', e => {
      e.waitUntil(
        caches.open(cacheName).then(cache => {
          return cache.addAll([
            '/',
          ]).then(() => self.skipWaiting());
        })
      );
    });
    self.addEventListener('fetch', event => {
      event.respondWith(
        caches.open(cacheName).then(cache => {
          return cache.match(event.request).then(res => {
            return res || fetch(event.request)
          });
        })
      );
    });
    

作为一个事件,install会在ServiceWorker第一次装入时被调用,此处你可以做一些初始化的工作,典型的工作是加载在离线时会需要的文件到cache内。这里我们制定了”/”,因此任何内容都会被缓存下来。

第二个事件是fetch,当访问远程资源时会被调用。这里可以做一个匹配,如果在cache内有就曲cache内的资源返回,否则去远程取。

第三个文件b.html就是一个为了演示离线效果的文件,内容为:

    

serviceWorker B

虽然即可安装http server,并在当前路径内执行它:

    npm i http-server 
    http-server 

访问:

    http://localhost:8080/index.html

    http://localhost:8080/b.html

随后,关闭http server,再次访问

    http://localhost:8080/b.html
    

居然可以访问~,而这就是离线实现的效果。

嗯,想要查看service workers的运行状况,还可以使用如下url来:

    chrome://inspect/#service-workers

可以看到更加细节的是这个:

    chrome://serviceworker-internals/

在这里可以启动,撤销注册等操作。

可以查询它的实现情况,还不是那么乐观:

    http://caniuse.com/#feat=serviceworkers
    

ref

https://developers.google.com…

关于

作者:刘传君

创建过产品,创过业。好读书,求甚解。
可以通过 1000copy#gmail.com 联系到我

出品

bootstrap小书 https://www.gitbook.com/book/…
http小书 http://www.ituring.com.cn/boo…
Git小书 http://www.ituring.com.cn/boo…

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn

高可用架构篇–MyCat在MySQL主从复制基础上实现读写分离-演道网

一、环境

操作系统:CentOS-6.6-x86_64-bin-DVD1.iso

JDK版本:jdk1.7.0_45

MyCat版本:Mycat-server-1.4-release-20151019230038-linux.tar.gz

MyCat节点IP192.168.1.203      主机名:edu-mycat-01  主机配置:4CPU4G内存

MySQL版本:mysql-5.6.26.tar.gz

主节点IP192.168.1.205     主机名:edu-mysql-01   主机配置:4CPU4G内存

从节点IP192.168.1.206     主机名:edu-mysql-02   主机配置:4CPU4G内存

 

二、依赖课程

《高可用架构篇13–MySQL源码编译安装(CentOS-6.6+MySQL-5.6)》

《高可用架构篇14–MySQL主从复制的配置(CentOS-6.6+MySQL-5.6)》

注意:上一节课中讲到的MySQL主从复制配置,在用MyCat做主从读写分离或其结合实际项目场景应用中,主从复制配置还需要按实际需求情况进行调整。

(调整后的主从数据库my.cnf配置文件,随视频教程压缩包提供)

 

三、MyCat介绍   MyCat官网:http://mycat.org.cn/

MyCat的读写分离是基于后端MySQL集群的主从同步来实现的,而MyCat提供语句的分发功能。MyCat1.4开始支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠。

                                              images/486Z66KT6f5CxTHcWNc4EEB6hae7AFZx.jpg

四、MyCat的安装

1、设置MyCat的主机名和IP与主机名的映射

# vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=edu-mycat-01

# vi /etc/hosts

127.0.0.1 edu-mycat-01

192.168.1.203 edu-mycat-01

192.168.1.205 edu-mysql-01

192.168.1.206 edu-mysql-02

 

2、因为MyCat是用Java开发的,因此MyCat运行需要安装JDK(准确来说是JRE就够了),并且需要JDK1.7或以上版本

# vi /etc/profile

## java env

export JAVA_HOME=/usr/local/java/jdk1.7.0_72

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

# source /etc/profile

# java -version

 

3、创建mycat用户并设置密码

# useradd mycat

# passwd mycat

 

4、上传安装包 Mycat-server-1.4-release-20151019230038-linux.tar.gz MyCat服务器中的/home/mycat目录,并解压并移动到 /usr/local/mycat目录

$ tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz

images/5zjYKhNSEFx72WRnbXRKRyKRP3Tc3mPW.png

$ su root

Password:

# mv /home/mycat/mycat  /usr/local/

# cd /usr/local/mycat/

# ll

images/JajXB5dieDDE2dYSHWfKHs3h8NdGp87w.png

 

5、设置MyCat的环境变量

# vi /etc/profile

## mycat env

export MYCAT_HOME=/usr/local/mycat

export PATH=$PATH:$MYCAT_HOME/bin

# source /etc/profile

 

五、配置MyCat

1、在配置MyCat前,请确认MySQL的主从复制安装配置已完成并正常运行。MySQL主从数据的同步在MySQL中配置,MyCat不负责数据同步的问题。

补充:

(1) MySQL主从复制配置中,如果涉及到函数或存储过程的同步复制,需要在/etc/my.cnf中的[mysqld]段中增加配置 log_bin_trust_function_creators=true 或在客户端中设置 set global log_bin_trust_function_creators = 1;

(2) 如果要做读写分离下的主从切换,那么从节点也有可能会变为写节点,因此从节点就不能设置为只读 read_only=1

(3) Linux版本的MySQL,需要设置为MySQL大小写不敏感,否则可能会发生找不到表的问题。可在/etc/my.cnf[mysqld]段中增加 lower_case_table_names=1

 

2、配置MyCatschema.xml

schema.xmlMyCat最重要的配置文件之一,用于设置MyCat的逻辑库、表、数据节点、dataHost等内容,

[mycat@edu-mycat-01 conf]$ cd /usr/local/mycat/conf/

[mycat@edu-mycat-01 conf]$ vi schema.xml

xml version=“1.0”?>

DOCTYPE mycat:schema SYSTEM “schema.dtd”>

<mycat:schema xmlns:mycat=“http://org.opencloudb/”>

     

     

      <schema name=“rc_schema2” checkSQLschema=“false” sqlMaxLimit=“100” dataNode=“rc_dn2”>schema>

      <schema name=“pay_schema2” checkSQLschema=“false” sqlMaxLimit=“100” dataNode=“pay_dn2”>schema>

 

     

     

      <dataNode name=“rc_dn2” dataHost=“dtHost2” database=“roncoo” />

      <dataNode name=“pay_dn2” dataHost=“dtHost2” database=“edu_simple_pay” />

 

     

     

     

     

     

     

      <dataHost name=“dtHost2” maxCon=“500” minCon=“20” balance=“1”

           writeType=“0” dbType=“mysql” dbDriver=“native” switchType=“2” slaveThreshold=“100”>

          

           <heartbeat>show slave statusheartbeat>

          

           <writeHost host=“hostM2” url=“192.168.1.205:3306” user=“root” password=“www.roncoo.com” />

           <writeHost host=“hostS2” url=“192.168.1.206:3306” user=“root” password=“www.roncoo.com” />

      dataHost>

     

     

     

     

     

     

mycat:schema>

MyCat1.4开始支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠,配置如下:

MyCat心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性:switchType=”2″ 与 slaveThreshold=”100″,此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制,MyCat心跳机制通过检测 show slave status 中的

“Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master 大于slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是否为0,为0时则表示主从同步,可以安全切换,否则不会切换。

 

3、配置 server.xml

server.xml 主要用于设置系统变量、管理用户、设置用户权限等。

[wusc@edu-mycat-01 conf]$ vi server.xml

xml version=“1.0” encoding=“UTF-8”?>

DOCTYPE mycat:server SYSTEM “server.dtd”>

<mycat:server xmlns:mycat=“http://org.opencloudb/”>

      <system>

      <property name=“defaultSqlParser”>druidparserproperty>

<property name=charset”>utf8mb4property>

     

     

     

     

          

          

          

          

          

          

          

      system>

     

     

     

      <user name=“user2”>

           <property name=“password”>roncoo.2property>

           <property name=“schemas”>rc_schema2,pay_schema2property>

      user>

     

      <user name=“user3”>

           <property name=“password”>roncoo.3property>

           <property name=“schemas”>rc_schema2,pay_schema2property>

           <property name=“readOnly”>trueproperty>

      user>

mycat:server>

 

4、防火墙中打开80669066端口

MyCat的默认数据端口为8066mycat通过这个端口接收数据库客户端的访问请求。

管理端口为9066,用来接收mycat监控命令、查询mycat运行状况、重新加载配置文件等。

[root@edu-mycat-01 mycat]# vi /etc/sysconfig/iptables

增加:

## MyCat

-A INPUT -m state –state NEW -m tcp -p tcp –dport 8066 -j ACCEPT

-A INPUT -m state –state NEW -m tcp -p tcp –dport 9066 -j ACCEPT

重启防火墙:

[root@edu-mycat-01 mycat]# service iptables restart

 

5、修改log日志级别为debug,以便通过日志确认基于MyCatMySQL数据库集群读写分离的数据操作状态(可以在正式上生产前改成info级别)

[mycat@edu-mycat-01 conf]$ vi /usr/local/mycat/conf/log4j.xml

images/MMGx5wpNjPWhszNzGt7pyJx4iyxmwewa.png

 

6、启动MyCat

[mycat@edu-mycat-01 bin]$ cd /usr/local/mycat/bin/

(1)     控制台启动,这种启动方式在控制台关闭后,MyCat服务也将关闭,适合调试使用:

[mycat@edu-mycat-01 bin]$ ./mycat console

(2) 可以采用以下后台启动的方式:

[mycat@edu-mycat-01 bin]$ ./mycat start

Starting Mycat-server…

(对应的,重启: mycat restart 关闭: mycat stop

 

7MyCat连接测试

(1)     如果本地Windows安装有MySQL,可以使用已有的mysql客户端远程操作MyCat

images/z6KfQ7yAFYMcCEnQe2c8eitnaFhP6BRS.png

images/s3wFNN6iwxDetR6cWYckj6FawJDaS5mA.png

 

(2)     如果为了方便,需要在MyCat主机上对MyCat进行操作(把MyCat当是本地MySQL来操作),可以在MyCat节点主机上安装MySQL客户端:

[mycat@edu-mycat-01 bin]$ su root

[root@edu-mycat-01 bin]# yum install mysql

 

使用安装好的mysql客户端登录MyCat

[mycat@edu-mycat-01 bin]$ mysql -uuser2 -proncoo.2 -h192.168.1.203 -P8066

images/4fTj3BdF3wYNrKm5wSS2xQFm3wYKtjfy.png

images/QPNbpd3BDcFC7ibcXRQKkRarkyEZMtKG.png

[root@edu-mycat-01 mycat]# vi /etc/my.cnf

增加:

[client]

default-character-set=utf8

保存后再查询,乱码问题解决,如下:

images/WmNFBfA4rhmzC5t2x5w267aMat2JyDN4.png

 

(3)     使用第三方MySQL管理客户端连接MyCat测试(navicat支持,MySQL-Front兼容性不太好),以navicat为例:

images/fFiMnpTTRKzeeaTPxKfcMG47tMN43aPP.png

images/tkyGDf2C5ck8ZrDp2eMrERiYD7bBBMaR.png

 

8、读写分离测试

(1) 监听MyCat日志

[mycat@edu-mycat-01 ~]$ cd /usr/local/mycat/logs/

[mycat@edu-mycat-01 logs]$ tail -f mycat.log

 

(2)     读测试

$ mysql -uuser2 -proncoo.2 -h192.168.1.203 -P8066

mysql> show databases;

images/jYTQjdY5jHa8diSXX353dSTZ5J63zDxK.png

mysql> use rc_schema2;

images/BkfSiEQpQbS4zNWd3ykP4GhbtC26yGcs.png

mysql> show tables;

images/GiDRKXeJ632FjhDPt6FZbFie5MFRTrBd.png

mysql> select * from edu_user;

images/ssBteWFwjGhXazpKkJSm3batSbMSpsyX.png

执行上面的查询语句,此时对应的MyCat日志信息如下:

images/EschPNzTYmzjk8kKHAGMdzcJfZcwhc6Z.png

多次执行 select * from edu_user 语句,MyCat打印出来的日志信息显示读操作请求都是路由到Slave节点(192.168.1.206)。

 

(2) 写测试

mysql> insert into edu_user (userName, pwd) values(‘吴水成‘, ‘roncoo.com’);

images/nPyE73875he2XE87cNGy2BtNQyQha6c5.png

执行上面的新增插入语句后,此时对应的MyCat日志信息如下:

images/pmcYQXYeJdGpfa7ATrfDAiinrnQpTKmb.png

多次执行以上插入语句,发现新增数据都是从 Master节点(192.168.1.205)插进入的,并且Slave节点通过Binlog同步了Master节点中的数据。

images/fXabWyYaeEmGxhNDHAAHaMs56KPbsrCC.png images/XyeK5DZxhT3AZknGQdX7NN3AtNJCG5An.png

 

综上,基于MyCat的读写分离集群配置成功。

 

 

接下来计划课程:

MyCat读写分离集群的主从容错(切换)、恢复;

MyCat的高可用集群 HAProxy + Keepalived + MyCat


关注微信:

images/pHjDHHEMSKWep5HZ3pEJCXEcnz2F2BrZ.png

转载自演道,想查看更及时的互联网产品技术热点文章请点击http://go2live.cn