问:
你在项目一般使用什么中间件,有什么作用?
答:
我一般使用redis,zookeeper,mysql,rabbitMQ,nginx。
redis我在项目做缓存数据库使用。一般缓存用户的session,和一般不会改动的字典表,系统
参数。
zookeeper,我实在dubbo项目中作为注册中心使用。来做dubbo的项目中的服务治理功能。
mysql作为数据库。
rabbitMQ作为消息中间件,我在做异步处理和分布式事物时用到。
nginx我作为前端和后端的反向代理和负载均衡。
问:
redis你是怎么使用的?比如说redis的失效机制?
答:
首先redis一般会作为集群出现,这里是依靠redis本身自己就可以搭建集群,利用自身的sentinel
哨兵机制,就可以搭建redis的集群。
redis的失效机制,分为二种,一种为主动失效机制。一种为被动失效机制。
主动失效机制指的是redis本身自己的定时器执行清除数据。查询export文件下的数据及其对应的
失效时间,如果已经失效时间已经过了。
被动失效机制指当客户端去查询时去查询数据。
Master机器是先通知Slave机器删除key,在自己执行删除操作。先删Slave再删Master.
实体类缓存到redis中必须是序列化的对象,因为这样可以序列化到磁盘中永久保存。
问:
mysql长用吗?你们是如何使用mysql数据库?如何做数据库架构?
答:
目前我们公司使用mysql的主从结构。一主一从mysql来做主从复制,mysql之间直接可以做
主从复制,上面可以搭建mysql-proxy软件,他可以作为读写分离,它将主从数据库在proxy
中设置写的数据库和读的数据库。并且设置出指定端口,作为mysql的连接的ip和端口。二个
mysql都需要做proxy。在proxy上再搭建keepalived,虚拟出相同ip和端口。这里做主从切换。
问:
rabbitMQ的使用,有什么优缺点?
答:
rabbitMQ我们一般做消息中间件,二个微服务至今可以相互MQ调用。最重要的可以做分布式事物
的辅助工具,一般我们用spring cloud的stream来使用它,因为它对rabbitMQ和kafka消息中
间件的封装,这样我们在更换消息中间件这样就不用更换很多代码。
总结:
在淘宝的面试中,他侧重问了redis的失效机制。
在平安健康的面试中。侧重问了zookeeper的知识,如何选主,通信,搭建集群。
所以你要不仅了解这些东西,更加了解深入这些中间件。基本对于大型公司来说他们的技术团队
一般分为了解业务的业务技术团队,他们更加了解业务代码,了解业务。或者是更加注重技术的
中间件开发团队。他们开发一些底层的中间件。比如平安健康的中间件开发团队自行开发的mysql
二次开发,来确保他的分布式事务。对于前者你需要有业务理解能力和抽象能力。将业务逻辑代码
设计好抽象好,不要用面向对象的代码去写面向过程的代码。
推荐好文[架构师如何应对复杂业务场景?领域建模的实战案例解析](https://toutiao.io/posts/oigmmp)
后者就需要你有很强的中间件开发功底。你用过那些中间件,怎么使用,具体怎么了解。
尤其是阿里巴巴他们的dubbo和zookeeper和他们自行开发的mysql数据库。大多是他们的二次开发。
如果你想进入他们的一员你就必须对这个加油努力。