我可以一口气把我所了解的技术说一遍,但是我却无法更深入的理解这些东西在具体使用中的职责是什么,所以有了本篇博客一个记录、学习。

商城的后台是java语言的,所以很自然的使用了:

jsp+servlet+structs2+hibernate+spring+ajax

jspserlet我之前学习过了,其中一个整理了一篇日志。我手上有一本《JavaWeb编程实战宝典》,学习到jsp写登陆就暂停了。哦~大不当啊,没有持续。当时我在干什么呢?从日志记录来看是分神了,去捅了一点研发管理、测试管理的理论,加上最近太忙,就没有拐回来所致,哎,我这个人就是太贪心了,面面俱到,没有深入的。所以这个计划还是要继续下去。话又说回来,学这么多,其实我在测试这块的累计还是有限啊,明年怎么涨工资啊,万一干的不爽出去找工作,卖什么啊?说什么jmeter会用,讲真我真不觉得那工具能怎么样,我花了2天晚上就把教学视频看完了。真的在工作中使用,作为一个测试,你唯一厉害一点的就是工具熟悉一点,压测的时候也需要研发配置你,给你开接口才可以压测。真的不能以为你掌握了一个性能工具就懂性能测试了,不是那样的,要做一个压测,都是团队合作,反正我做了很多次压测,基本上是low的一逼,我甚至教研发用jmeter,最简单那种一教就会,在研发内部推荐大家自己压,一个研发反应快马上就懂压测自己的代码了,嘿,测试小朋友,你的价值呢,搞笑啊,会用jmeter?由于我之前研究学习了http协议,用起jmeter还是没有什么障碍。知识网上有,不懂2分钟后就懂了,再不行,开源的有官方文档,读啊,尼玛六级不是白过的。最近一周读完了《操作系统之哲学原理》后,对计算机又加深了认识,看看对性能测试这个方向真的感觉我做的太low逼了。扯得远了点,就是说学的东西(就是这个javaweb宝典)啊,不好卖钱,我又缺钱,而且还很贪(双11买了一堆无关测试的书)。三难啊。

使用的容器:tomcat,这个基本配置是我在维护,有所了解,但是还没有达到精进的程度,比如性能优化怎么搞,我就不太懂。这里还有提升空间。最近去看了jvm的原理,忘了摘抄,大概知道些,堆栈,垃圾回收,线程,这个地方回头单独出文。

代码管理工具:git,这个在公司内部使用最深的人大概就是我了,命令行操作无形的装逼,脚本自动化之类的,可以解决各种发布的问题,什么多少小时内提交过代码就怎么样之类的逻辑。不懂,查一下就解决了,所以没有什么困难了。

编译和包管理工具:maven。能用,编译打包,其他的更深的没有必要纠结。

研发工具:eclipse。只能呵呵了,java用的少,基本能用起来,一般是看git log,查看方法调用、查看研发修改代码引用之类,自己写代码还差点火候,还有延展空间。

数据库:mysql。我负责刷脚本,研发提交脚本过来,我负责刷生产和测试库,一些语法错误可以纠正,什么左联右连不熟啊亲。其他select\update\insert\之类的知道,但是不熟练。所以这个地方可以找个时间再总结下,虽然已经看过2次教材了,但是平时用得少,知而已。哎,一切以效率为先,navicat足够了。。。自我鄙视

页面框架:vue+kendo。哦,这个就完全不是我的领域了。但是我shell帮他们解决了每次发布手动替换的问题,自动化发布。我的水平,知道css/html/javascript的分工,css的几个样式分类器(不确定这么叫),html的标签啊,大概知道html里面的结构之类。好歹也是用selenium玩过jQuery的啊╮(╯▽╰)╭

技术对我来说,知道个大概,具体要说明白,说出点道道来不是一下两下的事,就目前这种状态呢,基本和我大学时代接受一个观点相同,那个观点的核心就是:这是一个知识大爆炸的时代,你不可能也不用去记住具体的知识是怎么样的,但是你一定要搞清楚知识是如何被使用的,已经有哪些知识可以被使用,最关键的是你要知道如何找到它们,并用起来。这里想起另一观点,知识是分级别的,一手知识来自源头,二手知识来自无差别转发,三手就是自己理解转述之类,最好是去拿一手的知识。

其他我暂时还无法知道具体作用的:

netty是代码里的,从研发口中听说过,其他我在负责维护,基本的启动配置都知道。但就点到为止了,不能再深入。所以这篇文章主要是它们几个。

Netty

homepage
http://netty.io/
百度百科基本忠实了官网描述,那我再引用一张官网的图:
这里写图片描述

Netty is an asynchronous event-driven network application framework
for rapid development of maintainable high performance protocol servers & clients.
在我目前这种层次来看,我们用netty就是简化了网络通信的编程复杂程度,把底层的通信都交给了netty打理。
基于netty提供的能力(可扩展的事件模型、通用的通信api、防内存溢出的富字节缓存机制(意译二手)),构建起我们商城的各类网络通信。

过程中了解到一个新词语:NIO
Java NIO与IO
Java NIO 系列教程

zookeeper

HomePage
http://zookeeper.apache.org/
zookeeper系列文章
http://www.cnblogs.com/wuxl360/category/874409.html
它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
那,在我们这个商城里面,zookeeper被用作了和RPC打交道。找到下面文章基本上就是它的原理了:
你应该知道的RPC原理

读完文章,就对RPC有了更深入的理解。比如我们有大脑总控定位的uic,与之对应的是uic-rpc服务。它们两的jdbc使用的是相同账户和密码,uic-rpc最开始是没有的,是从uic里面分离出来的,干了uic的一些对外提供服务的事情,大部分还是操作uic的数据库,这样就解放了uic的代码,使uic修改减少,更加强壮,易于扩展。而zookeeper还具备分布式同步的能力,就能保证多个rpc操作同一个表的数据一致性。在整个体系中起到了一个服务自动注册与发现功能。
这里写图片描述
所以,调用方,通常也会配置zookeeper的链接方式和账户密码,以及它需要调用的rpc的服务名字,有如下配置:

1
rpc.call.models=module,imgr,mdata,uic

接着结合zookeeper的特性,它的多节点(虽然目前我们是单服务器多节点的方式,不过未来肯定是真的多服务器多节点方式),选举机制,加上同一个rpc的多节点,就可以构成一个网状的,分布式的服务集群,可以确保服务注册表的高可用性。

memcache

HomePage:
http://memcached.org/
Free & open source, high-performance, distributed memory object caching system, generic in nature, but intended for use in speeding up dynamic web applications by alleviating database load.
缓存,而且是分布式的缓存,顶替数据库承受压力。
由于网站的高并发读写需求,传统的关系型数据库开始出现瓶颈,例如: 1)对数据库的高并发读写:
关系型数据库本身就是个庞然大物,处理过程非常耗时(如解析SQL语句,事务处理等)。如果对关系型数据库进行高并发读写(每秒上万次的访问),那么它是无法承受的。
2)对海量数据的处理: 对于大型的SNS网站,每天有上千万次的数据产生(如twitter,> 新浪微博)。对于关系型数据库,如果在一个有上亿条数据的数据表种查找某条记录,效率将非常低。
在实际使用中,通常把数据库查询的结果保存到Memcache中,下次访问时直接从memcache中读取,而不再进行数据库查询操作,这样就在很大程度上减少了数据库的负担。保存在memcache中的对象实际放置在内存中,这也是memcache如此高效的原因。
这里写图片描述
from: http://blog.csdn.net/wusuopuBUPT/article/details/18238003

redis

HomePage:
https://redis.io/
Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker(代理). It supports data structures such as strings, hashes, lists, sets, sorted sets with range queries, bitmaps, hyperloglogs and geospatial indexes with radius queries. Redis has built-in replication, Lua scripting, LRU eviction, transactions and different levels of on-disk persistence, and provides high availability via Redis Sentinel and automatic partitioning with Redis Cluster.

在我查阅资料的时候我疑惑了,我们的架构怎么用了memcache又用redis,虽然两者都有缓存特性。
读此文:Redis、Memcache和MongoDB的区别
我们使用redis主要用来记录了各种商家配置,平台配置等。大概用它的原因是目前我们的压力还没有说高到突破它性能瓶颈的程度,另一方面,它支持主从同步,可以分布式部署,数据还可以持久化,目前用起来没有问题。一个比较头疼的问题是刷缓存,呵呵哒,数据库变更了,缓存不会主动更新,需手动刷key。这个不难,一学就会。
我疑惑的是memcache被用在了哪里。
补充:上班问开发,session。

active-mq

HomePage:
http://activemq.apache.org/
Apache ActiveMQ ™ is the most popular and powerful open source messaging and Integration Patterns server.

这理解起来就简单了,我们平台用它来发消息。各种消息,微信下单,优惠券,活动之类的。