微服务,够了
微服务,够了 1.为什么选择微服务? 依赖 部分功能实现 水平伸缩 2.我们为微服务做好准备了吗? 先决条件是什么? 快速配置 基本的监控 快速部署 3.微服务的负面因素 运营成本的增加 你的应用会被拖慢 本地开发变的更加的困难 难以伸缩 4.然后呢? 如何向微服务迁移 清理应用程序 重构应用程序 抽取模块独立应用程序 独立应用程序迁移到不同主机 如果可能,重构数据存储系统 百度脑图查看
微服务,够了 1.为什么选择微服务? 依赖 部分功能实现 水平伸缩 2.我们为微服务做好准备了吗? 先决条件是什么? 快速配置 基本的监控 快速部署 3.微服务的负面因素 运营成本的增加 你的应用会被拖慢 本地开发变的更加的困难 难以伸缩 4.然后呢? 如何向微服务迁移 清理应用程序 重构应用程序 抽取模块独立应用程序 独立应用程序迁移到不同主机 如果可能,重构数据存储系统 百度脑图查看
善忘影视十一 随着抓取的数据越来越多,影视记录表中的数据已经达到了4w多的数据,虽然数据不是很多, 但是搜索结果却超过了好几秒,虽然也存在nginx配置的问题,时间设置的比较短,很容易就超时了,但是就算设置长一些,对于微信结果返回来说,超过5秒就不能正确的返回信息了。 为了解决加载速度缓慢的问题,使用chrome查看加载时间,发现主要是后台的速度慢,所以通过两个方面的优化。 针对列表数据,按照时间排序的功能,对时间添加索引 对于通过关键字搜索的功能,mysql数据库不能很好支持%关键词%,这种模糊查询,以前玩过一段时间lucene,所以打算用这个优化查询,提高查询速度。 如上图中的主页和最新,两个列表功能,打开速度慢,主要是查询的时候,语句中没有添加索引,导致了查询结果太慢。 不管是通过客户端,还是sql命令执行,字段加上索引,打开速度比以前快了不是一点点 针对微信公众号搜索框搜索内容,主要搜索的是title标题,所以只对title做索引操作,lucene也只有两个字段,就是id,title信息 主要的步骤就是先对title生成索引,使用的是ansj分词器,通过lucene搜索到对应的….
优化列表加载速度,列表图片压缩 如下图左边的图片 运行了一段时间后,发现打开公众号,或者网页的列表速度很慢,用chrome查看了一下加载时间, 主要是还是在加载图片上,毕竟列表加载那么大的图片,是一件很费时间的事情,现在我就来优化它。 主要分三个步骤 1. 获取列表图片(获取详情页中的海报图片) 2. 压缩图片 3. 上传云存储图片,保存路径到数据库中 3. 修改显示列表图片,显示压缩后的图片 获取列表图片 主要是通过定时器来获取列表数据,然后分析详情页的里面的图片地址,下载对应图片。 关键代码如下 List movieCrawlList = movieCrawlMapper.listNotDealImgByCreateTime(); try { movieCrawlList.forEach(mc -> { String content = mc.getContent(); if (StringUtils.isNotNull(content)) { Document doc = Jsoup.parse(content); Elements imgs = doc.select(“i….
使用jenkins来自动发布war包, 比自己用ant写发布要好点 需要配置用户密码,git也一样的, 需要能访问的用户密码 reployfangmaster.sh #!/bin/bash kill -9 $(ps -ef|grep ‘tomcatfd’| grep -v ‘grep’ |awk ‘{print $2}’) rm -rf /opt/tomcatfd/webapps/fangmaster.war rm -rf /opt/tomcatfd/webapps/fangmaster cp /root/.jenkins/jobs/fangmaster/workspace/target/fangmaster-0.0.1-SNAPSHOT.war /opt/tomcatfd/webapps/fangmaster.war /opt/tomcatfd/bin/startup.sh 发送邮件, 需要在系统设置 配置发件人信息
主要解决的问题: 影视的数据十五分钟更新一次, 为了减少数据库的访问,添加了redis缓存,缓存数据查询的结果,这样相同的数据就不会再查询一次了数据了,加快查询结果的返回 序列化对象工具类 一共四个方法,序列化对象和数组,反序列化对象和数组 //序列化bean对象–object–>byte[] public static byte[] serialize(T obj) { if (obj == null) { throw new RuntimeException(“序列化对象(” + obj + “)!”); } @SuppressWarnings(“unchecked”) Schema schema = (Schema) RuntimeSchema.getSchema(obj.getClass()); LinkedBuffer buffer = LinkedBuffer.allocate(1024 * 1024); byte[] protostuff = null; try { protostuff = ProtostuffIOUtil.toByteArray(obj, sc….
去,你的旅行 世界那么大,任性的资本 1.月薪过万,无法任性 2.工薪几座大山 3.存钱讲究科学 结婚潮,守卫钱包 1.学会理财,提前做好预算 2.鸡蛋别放在同一个篮子里面 3.能省则省,红包也能拼 4.准新人,避开五一 5.收份子钱, 要及时钱生钱 预算3000出国游? 斯里兰卡-印度洋上的眼泪 尼泊尔-东方瑞士 柬埔寨-静谧的古老国度 斐济 秘鲁 香港 钱包太小,算算再出发 是不是最想做的 成本是否接受 下载地址: 百度脑图 SVG格式
下载地址: 百度脑图 SVG格式
在善忘影视公众号中,搜索到自己想找到的电影列表, 点击列表中的任何一条,都会跳转到电影的详情页,详细描述了电影的相关元数据信息。在详情页的最下方,有一个发送邮件的功能。或许您觉得没什么用,但是在某些时候,需要电脑下载的,而不是直接用手机下载的话,还是挺有用的。我自己就经常看到好看的电影, 就直接发到我自己的邮箱里面,在电脑上打开邮箱的时候,直接点击迅雷下载就好了。如下图,只要按直接在输入框里面输入邮箱地址,点击确定,就会发送到您的邮箱了。 原来想着做一个漂亮的邮箱模板, 发送到邮箱里面的,奈何太多邮箱类型,根本就不支持这种html语法,导致了最后简化功能,只能使用最简单的图片,加下载链接的方式来简单处理了,发个邮件看上去简单,实际上需要掌握的东西还挺多的。如下图,收到邮箱信息大概就是这么样子 下面我详细的讲解一下我做这个功能的需要注意的地方。 1.发送邮件的发件人统一使用了善忘影视的名称 这一点的话,只需要在发送邮件(commons-email)的时候,设置发件人信息为中文字符,并设置编码就好了。如下面代码email.setFrom(key, value,“GBK”); Iterato….
下载 百度脑图源文件 svg格式
微信公众号开发--善忘影视(七) 今天我们就来说说数据抓取的问题,数据来源电影网站的数据抓取。 首先想着用网上现成的爬虫程序去抓取想要数据,然后倒入到数据库中。 八抓鱼采集器 测试了一下, 抓取数据什么的功能不是很复杂, 自己设计的表数据, 住去也都是图形化界面,还有能直接导入的,功能还是挺齐全的, 但是免费版本没办法用。功能限制太大了。对于我导入数据来说太难了,毕竟影视的数据会很多。看下图资费情况 ,如果用于商业的话, 其实也还行,可以节约不少开发时间。不过配置起来的, 还是需要懂一点点代码的,不懂代码来用的话难度还是不小的。 火车头采集器 和上面的原因的, 需要自己配置懂点html代码什么的,价格的话, 可能会便宜的, 如下图 所以这两个免费版本都不符合要求, 我还是自己写代码来抓取好了。 桌子前也有过抓取代码的经验, 所以写这个简单的抓取连接并不难。 java抓取数据,解析html比较简单。是用jsoup来做就好。方便快捷。再通过定时器来抓取,比较方便使用。如下代码以‘电影天堂’示例。 网站编码gbk,直接通过jsoup获取会有中文部分乱码,通过去连接url设置字符编码就可以解决….
今天不知道为什么阿里云tomcat停掉了, 微信什么的,都不能提供服务了。上去找也没有找到原因,就想到,自己本地用联通的宽带加上花生壳做了一个外网映射域名,也有tomcat跑着相同的服务。搭建外网域名映射可以参考我hskserver ,只需要简单的配置,就能做到绑定联通的动态域名来获取ip地址。不用担心动态ip的问题了。 之所以选择在本地也部署服务, 主要是阿里云买的ecs配置太低了。 怕跑爬虫等程序,太慢了, 所以数据都是本地服务器抓取上来,放到数据库里面去的 。这样的话, 阿里云的机器,只是用来展示数据了,对机器要求不高了 。今天突然想起来, 阿里云的服务总是挂掉的话, 也烦人, 还不如直接使用本地的tomcat,但是联通太坑了 ,封了80,8080端口,没办法, 只能通过阿里云的ecs来跳转。原来我就在ecs上配置有nginx跳转的。配置如下图 其实只需要简单配置上面那两个地址就好了,但是中间因为一个很简单的问题, 导致了我微信订阅号,善忘影视输入搜索条件无法搜索了。找了很久原因, 也重启了服务 。重发版本都没有解决,最后发现重新初始化微信后台连接,发现日志里面一些信息….
今天新增了一个搜索的功能,主要是方便web这块的搜索, 直接在网页端也能搜索内容,而不一定要在微信中搜索结果了。 微信没有认证, 然后呢, 输入框就会出现这种情况了。提示不要输入账号密码什么的,真的无语了, 正好挡在了我的搜索框上。后面再优化好了。出现下面提示,请稍等输入搜索关键字 搜索结果如下图,效果还不错, 还可以下拉加载更多。 实现这个功能很简单,直接上源码吧,就一点点js的代码 搜索 取消 正在加载… <jsp:include page=“/weixin/weuiTabbar” flush=“true”/>
对于不会前端的我,设计就更不会了,找现有的前端框架就实必须要的了。 还好微信直接出了weui , 这个前端对于公众号来说,这个ui界面是最好不过了, 几乎不需什么前端的技巧,就可以拿过来用,很贴合微信的风格。还有一个jquery插件功能的,一些基本脚本也都已经写好了,而且ui使用的原生weui界面。所以我选择了,这个jquery-weui,适合后台开发者,快速的开发前端界面。 微信自己出的ui界面 jquery-weui扩展组件 网站链接上有现成实例,使用说明。直接点击查看就好了,示例写的很详细, 看到自己需要的效果,直接添加对应的组件就好了。 以下是我公众号的一些效果,前端页面都采用了jquery-weui,一些tabar,导航栏,列表,提示都直接使用了。只需要自己对接后台获取数据就可以了。
善忘影视的目标是让大家找电影的时间变快,搜索结果准确,没有网站上的那么多广告内容, 要跳好几个广告页面,才有我们需要的电影下载链接,还有google浏览器那红色背景的提醒, 现在用google浏览器的人多了,一看到下面这个界面,你还有勇气点开不。 可能病毒, 只是误报而已, 但是里面含有广告链接肯定是不可避免的, 至于广告带什么内容,有没有病毒就不清楚了, 我一般不敢去点。 说了那么多, 下面就讲讲我搜索的数据来源了。现在搜录了3w多影视剧集,都是来自于网上的链接,自己写程序抓取来的,数据库结构很简单。一共就两个表的信息。moviecrawl表示抓取内容信息,moviecrawllink表示抓取对应影视剧集的下载链接。 CREATE TABLE moviecrawl ( id bigint(20) NOT NULL AUTOINCREMENT, movietype int(11) DEFAULT NULL COMMENT ‘电影分类1.最新电影2.华语电视剧3.日韩电视剧4.日韩电影5.欧美电影6.国内电影7.综合电影’, title varchar(200) DEFAULT ….
打开开发者模式后,需要一个后台接收微信过来的请求, 比如搜索框输入电影名字, 能返回相关电影列表信息 。 如上我搜索老九门 返回了搜索结果点击对应列表信息,就能查看影视节目的详情信息了。 为了简单, 不需要自己从零开始实现微信上的接口了, 比起最早什么都要自己实现来,现在开源的微信框架都挺成熟了。 我这里用的是http://git.oschina.net/lisenhui/mpsdk4j这个开源的实现, 可以节约很多时间,当然, oschina上有很多,选一个自己觉得可以的就行了, 都大同小异了。我使用的是ssm框架结构,可以看道文档里面有关于springmvc使用说明,如下图, 现在已经是最新版本的,我用版本是早点版本 ,代码可能有点区别,用实际的代码就好了。 #微信账号信息 在属性文件里面配置 weixin.appId=xxx weixin.appSecret=xxxxx weixin.token=xxx weixin.aesKey=xxxxx 在我的是实现类里面实现引用属性值,springmvc 配置文件中初始化了属性文件 @Controller @RequestMapping(….
不知道用什么名字好,就随便取了一个《善忘影视》公众号,用于检索影视资源,方便大家下载资源,了解影视资源的内容。 既然是个公众号,先上微信公众平台申请账号。网址:http://mp.weixin.qq.com/ 使用qq邮箱就可以申请了, 注意和qq帐号不是关联登陆的 。 申请账号注意了,个人用户功能很少。不过我这里不使用支付和菜单等功能。需要注意的时候,订阅号和服务号。订阅号主要是按照用来推广宣传,每天可以发送推送一条信息给我所有的关注用户,服务号主要重功能,提供服务,提供一些便民公众号,比如银行等功能。 这里我要使用的订阅号, 每天推送一条信息到用户上。 登陆到公众号,可以配置一些信息 在自定义菜单上面,如果没有打开开发者模式, 是可以配置一些固定的链接。菜单也可以显示出来的 但是这里我们需要配置开发者模式,所以后面启用开发者模式后,这个菜单会自动关闭掉。 素材管理里面就可以编辑我们每天要推送的一条公众号内容信息。 找到公众号设置这里 名称是之前设置好的,头像和微信号可以设置,微信号就是可以通过这个账号搜索到账户,除了中文的公众号。….
cmd命令: 1、切换的druid-1.0.16.jar包所在目录 2、在命令行中执行如下命令: java -cp druid-0.2.9.jar com.alibaba.druid.filter.config.ConfigTools you_password 即输出加密后密码 3、 新版本需要添加公钥方法进去: config.decrypt.key=${config.decrypt.key} 参考:https://github.com/alibaba/druid/wiki/%E4%BD%BF%E7%94%A8ConfigFilter 官方的文档并没有明确说明需要加这个公钥 ,查看了源码后,才知道了需要添加公钥进去才行
5个多月辛苦努力,2.0版本已经正式上线了。 希望一切都能顺利,在互联网行业也算是有几个月的经验了, 期间趟过的坑也算是有无数个,曾经说是要坚持的事情,如写博客之类的,坚持运动之类的都已经放弃的不少了。以后能正常上下班的话,一定要重拾这些,坚持下来。
参照aliyun的服务器介绍,导入到本地的数据根本就没有办法用。本地数据库也无法启动起来,找了好久才找到问题 。 参照文档里面,RDS使用的是innobackupex这个工具来备份的。这个工具的感觉对于备份mysql来说,特别好, 备份速度快,同时支持InnoDB,MyISAM,因为我的数据库中就有这两种引擎, 所以,这个工具比较好。 主要的操作步骤如下,就可以把rds上备份的文件,解压缩后,恢复到本地的数据库,建议在本地新安装一个没有使用过的新库,不然,丢掉了数据库数据就亏大了 innobackupex –defaults-file=/var/lib/mysql/backup-my.cnf –apply-log /var/lib/bak 没有指定数据文件路径, 默认的my.cnf文件有指定datadir参数,默认会放在/var/lib/mysql目录下 innobackupex –copy-back /var/lib/bak 必须要授权给mysql用户, 才能启动 $ chown -R mysql:mysql /var/li….
查找问题的主要从两个方面来查找 第一步: vim /etc/mysql/my.cnf找到bind-address = 127.0.0.1 注释掉这行,如:#bind-address = 127.0.0.1 或者改为: bind-address = 0.0.0.0 允许任意IP访问; 或者自己指定一个IP地址。 重启 MySQL:sudo /etc/init.d/mysql restart 第二步: 授权用户能进行远程连接 grant all privileges on . to root@“%” identified by “password” with grant option; flush privileges; 第一行命令解释如下,.:第一个代表数据库名;第二个代表表名。这里的意思是所有数据库里的所有表都授权给用户。root:授予root账号。“%”:表示授权的用户IP可以指定,这里代表任意的IP地址都能访问MySQL数据库。“password”:分配账号对应的密码,这里密码自己替换成你的mysql root帐号密码。 第二行命令是刷新权限信息,也即是让我们所作的设置马….