SNG mini项目总结
Mini项目总结
一.项目介绍
一款懂你的陌生人社交APP
项目代码:https://github.com/fwdhz998/getyou
二. 项目内容
1.产品使用流程:
图一 产品使用流程
2.前端框架:
图二 前端框架
3.后端框架
图3 后端框架
4.算法框架:
本项目算法框架由两部分构成,分别是用户标签过滤算法与情感分析算法,其中本项目主要完成用户标签过滤算法,情感分析算法由BosonNLP的API提供。
4.1标签过滤:
用户的标签分为长期标签与短期标签,长期标签由引导页设置(共10类),短期标签由用户的输入获得。通过长期标签的匹配与短期标签的匹配综合得出最“可能”的陌生人。
4.2情感分析:
情感分析算法的大体由基于Word2Vec的目标分类算法实现,本项目出于时间考虑直接选用API直接调用。在此基础上,做了进一步细致根据情感因子划分的匹配算法。
三.项目总结
1.压测严重不过关:
现象:MySQL数据库插入时间极短,且无复杂的逻辑交互。但为何压测如此差,经分析由以下几点:
1.数据库未建索引、没有删除表的动作导致表原来越大、没有拆分拆表、没有合理的根据业务逻辑设置表关系、未建外键、、、
2.使用的Phalapi框架对于高并发的请求表现差,可能由于单线程或者php对于线程的支持不好,可能在代码上某些php数组拷贝动作耗时过大。
3.未使用redis缓存或未使用线程池加消息队列将请求即时返回。Mysql数据库的读可以先由redis缓存起来,然后定期由redis实现持久化。
2.未考虑容灾问题
1.分布式session同步:
1.1进程间通信传递session数据:每一个主机都广播自己的session,这种方式会累死主机,直接pass
1.2 cookie存储方式:session里只放小数据,并且对session加密,缺点是不能在session里放大的数据,且安全性不高。
1.3 cache集群或者数据库做session管理.我们把session放入到cache集群或者数据库中,每次请求的时候,都从他们中来获取。这样,所有的机器都能获取到最新的session数据。这种方案也是很多中大型网站采用的解决方案。他实现起来相对简单(利用cache集群或者主从数据库自身的管理来实现多机的互备),而且效率很高,安全性也不错。
1.4 在入口nginx处对用户cookie做一致性Hash,将某一用户分配到固定机器
1.5 搭建session服务器,各后台逻辑处理服务器直接到session服务器去拿数据。
2.数据库容灾
1.mysql主从备份(复制)的基本原理
mysql支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。mysql复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
2.“备份”与“容灾”
例如服务器、网络、存储哪一点出现问题,都会中断服务,所以这个时候每个点都需通过技术手段做保护,这就是容灾要考虑的事情。“备份”要停止服务的,恢复过程是需要时间的。而“容灾”是要不中断服务的。
(容灾类)
3、“高可用”:及HA(High Avaliable),一般实现方式是对2台服务器上面装HA的软件,这时候就和“双机热备”的概念一样了,一般正常服务时只有主机在工作,两台服务器中间会有心跳的hello包,备机会一直发hello包检测主机是否“活着”,超过一段时间主机没有应答hello包的话,备机就会认为主机死掉,然后主动接管业务了。这样子又实现了主机的容灾了。
4、“冷备”就没有什么好说了,相当于1台坏了,另外1台还要我们手动去启动,配置,才能接管坏了那台的工作。
5、“容错”:Vmware的虚拟化软件提出的一个概念,相当于1台虚拟机运行的时候,多开1台虚拟机,当一些操作在A虚机运行,会通过软件同步复制操作到B。当A虚机崩溃,B主机立刻托管业务,由于操作都是同步复制的,所以B不会丢失任何在A上的内容(包括内存里面的临时数据)。此种方式比“高可用”的更高级,“高可用”的方式B还要通过A没有应答hello才发现A崩溃了,中间还是有一段过度的时间会业务中断,但是可以实现自动的业务恢复。而“容错”这种方式业务完全不用中断,但是相应换来了成本需要增高,原来1台虚机,现在相当于要多开1台来与他同步,资源成本增高。
6、使用CDN服务器
CDN的工作原理:通过权威DNS服务器来实现最优节点的选择,通过缓存来减少源站的压力。完整的CDN工作流程:
· 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DNS服务器。
· CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户。
· 用户向CDN的全局负载均衡设备发起内容URL访问请求。
· CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告诉用户向这台设备发起请求。
· 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;查询各个服务器当前的负载情况,判断哪一台服务器尚有服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址。
· 全局负载均衡设备把服务器的IP地址返回给用户。
· 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然将它分配给了用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地。
四.项目展望
1.产品维护用户活跃度:需要产品不断得退出新鲜的社交内容来维持产品的活跃度。
2.改善后端业务逻辑处理,缩减返回延时,采用多线程加消息队列加缓存的形式提升请求处理速度。做好容灾、负载均衡、CDN等服务器控制,尽量做出一个完整的技术方案。
SNG mini项目总结相关推荐
- 腾讯实习mini项目总结
1.从无到有的产品构思 第一次参加如此正式的产品项目组中,陌生的环境,陌生人给自己带来了很多的不适应,但正是这种新的成长环境和新的挑战,让我不在做自己熟悉的事,也许正如asoon在mini项目启动仪式 ...
- 如何从“点子”落地到“执行”?—完整解析1个手游传播类mini项目的进化
本文来自网易云社区 作者:林玮园 从点子到落地,是不确定到确定的过程,是从模糊概念到具体现实的实现过程.无论什么点子,在落地变现的过程中都会有很多疑问产生. 首先,不确定点子本身是否成立.点子的背后是 ...
- 【实习记】2014-08-20实习的mini项目总结
实习项目总结文档 项目介绍 项目逻辑很简单,只有几个页面,只能登录,查看,支付和退款.主要作用是熟悉C++的cgi的web服务开发方式. 项目页面截图 图一:登录页面 图二:买家查看 图三:买家支付 ...
- 2018年最全微专业之前端开发工程师:零基础完成MIni项目开发
课程目录 CSS基础.zip DOM编程艺术.zip HTML入门.zip JavaScript程序设计.zip JavaScript入门.zip we ...
- 全国高校MINI开发挑战赛结果出炉,99年的他们为什么能赢?
7月6日,由网易旗下通信与视频云服务品牌网易云信主办,网易七鱼.中国电信浙江分公司协助举办的"2019全国高校MINI开发挑战赛" 总决赛在网易杭州园区落下帷幕. 来自南京邮电大学 ...
- 13个大奖任你拿,网易MINI开发挑战赛强势来袭!
围观吃瓜 前排强势围观 哥们,PPT大赛了解下 一招PPT走天涯,呵呵 都是些什么鬼..... 啊啊啊啊啊啊 咸鱼表示拒绝 不用改代码了 PPT神马的是没有灵魂的 我这无处安放的才华啊... 哥表示拒 ...
- “彪悍的代码 不羁的创意”—— 网易云信全国高校MINI开发挑战赛战队招募启动...
4月18日,以"彪悍的代码 不羁的创意"为主题,由网易旗下通讯与视频云服务品牌网易云信主办的"2019全国高校MINI开发挑战赛"正式启动.全国"技术 ...
- 中国首个进入谷歌 GSoC 的开源项目: Casbin, 2022 年预选生招募~
Casbin 明日之星预选生计划-Talent for Casbin 2022 "Casbin 明日之星预选生计划-Talent for Casbin 2022"是什么? &quo ...
- 基于Web服务的PDF 排版引擎 XDOC(mini)发布
XDOC (mini) 项目地址: http://git.oschina.net/xdoc/xdoc 简介 XDOC(mini)是XDOC的精简版,项目的主要目标是提供一个基于XML的文档描述语言, ...
最新文章
- Linux输入输出I/O
- 成都网络推广分享长尾词如何优化的3大技巧,值得收藏!
- Android--添加子视图(addView和setView)
- 记录华为P40Pro+系列相机参数总结
- C++之undefined reference to “ssl::first::first()“
- 排队枪毙游戏c语言,基于C语言实现的约瑟夫生者死者游戏
- php 测试控制器,php – 控制器的Laravel单元测试
- mysql键太长_数据库,主键为何不宜太长长长长长长长长?(转)
- mysql查询特殊符号时_数据库查询中的特殊字符的问题_MySQL
- IOS开发中的几种设计模式
- sar分辨率公式_对PAR DAR SAR的理解
- linux pwm测试程序,DM8168 PWM驱动与测试程序
- STL---二分查找、去重、全排列
- 解决Maven项目pom文件中出现的错误:Missing artifact oracle:ojdbc7:jar:12.1.0.2.0:compile
- Revit二次开发 —— 点到面的投影
- 没有鼠标Mac怎么调出右键菜单
- xp系统计算机怎么连接到网络打印机,XP系统安装网络打印机教程(xp添加网络打印机步骤)...
- 岭回归(Ridge Regression)、OLS和吉洪诺夫正则化(Тихонов regularization)
- 使用OpenResty达到十万级并发超高性能Web应用(一):HelloWorld
- 一体化伺服电机一圈多少脉冲