我们组里做技术分享,大家都认认真真做 ppt,但我们技术负责人分享就只用 emacs。但他却是把问题讲的最清楚、最明白的。
Robert Morris 讲课也不做 ppt,课件就是有缩进的文本。同样的是东西讲的太明白了。
但他们这种我都学不来,我对技术理解没那么深,也讲不了那么明白,只有努力并老老实实做 ppt。
我们技术负责人几乎不怎么管我们。和产品、前端、测试团队比起来,我们后端是最松散的。
但他在技术上影响了我们很多(我们很多慢慢的都按照他的套路玩了)。比如忽悠我们买 Safari Books,忽悠我们看有价值的技术书籍、做有价值的思考。再比如看他怎么写代码、做架构、解决问题。他搞事情,简直就是降维打击。
没逼我们干过什么,但真的是被他忽悠忽悠着就上道了。
做一件事总有一些规则,比如演讲要写 ppt,管理要打卡。但有的人,可以打破这些。
恩,是的,无状态是说服务本身没有状态。
如果是无状态的服务,比如 API 服务,一致性一般是由后面存储保证。
一般 API 服务,可以不去考虑 CAP。存储服务(包括有状态的服务),比如 ETCD,才需要考虑 network partition 的时候,是否可读可写之类的。
一致性一般是由后面存储保证
不过也有特殊情况,GFS 存储就不保证一致性,由 lib 来处理。riak_pg(pub/sub),network partition 的时候可用,连回来的时候解决冲突。
ETCD 的一致性保证有点迷,读的时候是有可能读到旧数据的。
ttps://etcd.io/docs/v3.3.12/learning/api_guarantees/
然后,network partition 的时候,有说能读,有说不能读的,https://stackoverflow.com/a/28927474/2477886。
ETCD 基于 Raft,但没完全用 Raft,Raft 的 request 都是要经过 master,这样的话,没办法横向扩展,ETCD 应该是没有完全用。。。具体怎么用的,还得看代码。。
debug 才是麻烦的事情
一致性,有些时候也没那么重要,可以牺牲掉换新能,或者业务层处理一下。
很关键的地方,再根据具体情况处理。
CAP 是存储要考虑的,除非这个服务没办法搞成无状态的才需要考虑。而且几个节点 partion 的可能很小,可以不考虑。
赞赞赞👍
听起来蛮不错的,不过我还没试过看小说,觉得词汇量比较大,会不太容易
语法可以靠猜,大体理解应该还 ok。
不考虑我比较穷这一点以外,感觉挺香的。
明白,再次感谢。
哦,明白了,感谢。
再请教一下,是不是说探测出热点,就把数据在 web server 里缓存一份,降低后面存储的压力?换句话说,其实 web server 承担了缓存的责任?
感觉这个场景和 facebook 的有点像,他们有篇论文 Scaling Memcache at Facebook 感觉应该有一定的参考价值。
请教一下 redis 报警设置在百分之 40,这感觉有点低啊,为啥不弄高点?
感谢,我知道 Erlang 为了利用多核 CPU 有一系列的优化,有绑定 CPU、spin、sleep 线程之类的。但我没深入研究过 ,对硬件了解的比较少
不过凭感觉,Ruby Actor 应该是有优化空间的。当然,能利用多核,已经是非常大的一步了。
请教几个问题,还没看过 Reactor,不知道理解的对不对
这个 benchmark,要是 reactor 可以"绑定"到 cpu core 上,是可以成倍提升的?
Ruby 在调度(Ruby Reactor 是不是直接用系统线程调度的?)reactor 的时候,其实会有,一开始 reactor1 在 cpu0 上跑,然后跑着跑着,跑到 cpu1 上了这种情况?
而且随着 reactor/thread 的增加,这种情况会变多。
一直没找到比较好的 rust 学习资料,尝试写过一个小的 project,不过后来放弃了
java 有个 redis 的客户端,就是单线程 + 异步 io。
thread 和 fiber 有不同的适用场景。fiber 没办法抢占式调度,最后还得借助系统线程。
我对我说的那些话做个总结吧。。。
那两个 query 的例子,就是为了说明,Java 没有很好的东西处理这些常见的问题。所以需要花人力解决,所以生产力不高。
还有张口闭口 IDE 提示、手写 SQL 的,这些是编程入没入门的问题吧。
我在说生产力。。。举例能证明我的观点就够了。。。
如果是超大型微服务的项目(业务域内核心几十个系统),我不知道现在 RoR 在这方面怎么样
@fengkuok 是想说,这个场景下,Java 是一个选择,RoR 不一定行。
我的回复意思是,RoR 缺少实践,可能不行。但和生产力没啥关系。
为什么我们两个能聊下去?
大公司(有很多内部系统的公司),你的服务要依赖很多不稳定的其他服务和代码,并且要提供稳定的服务。用 Ruby,没有相应的支持(背书),要自己搞。背后隐藏来很多奇奇怪怪的东西。
这是楼主他们公司的事,我就是看个热闹。我不了解他们的具体情况,没发言权。
不过可以说一点,人力成本对小公司挺重要的,大公司,人力成本就没那么重要了。
*** 我只是说生产力问题,只针对下面这句罢了。***
感觉像讲故事,最近用 spring boot 做了一个小项目,在 idea 强大的智能完成加持下,感觉也不比 rails 效率低多少,但静态语言带来的安全感让写代码的心智负担降低很多。
最后,脱离场景(不了解情况)谈技术没有任何意义。
RoR 通过约定,降低复杂度。Spring 把复杂度都暴露给开发者了。有些 Java 的不便利,Ruby 里面就没有。
估计要习惯一下,习惯了就好。
恩,是的。
用不用 java 或者 spring 要看场景,每个人的认知都不一样,无关对错,个人选择罢了。
单说 web/API 开发。
如果是大公司,团队选择技术栈,那么我会选 java 和微服务。 如果是小公司:RoR 或者 Phoenix。 如果是个人项目:我会选 RoR。
这个是我个人的看法 ,我觉得参考价值不大。。。
不过确实没听过大公司,用 RoR 做微服务
超大型微服务的项目
我没研究过,但现在让我选的话,我不会用 RoR,因为觉得 RoR 缺少微服务方面的实践。
RoR 搞微服务的话,需要一些探索。Java 和 Go 这种,更稳妥一些。
n + 1 这个问题,我自问自答吧。
Java Spring 要解决这个问题,我手写 sql,同时有两个变量保存,还要把变量的关联关系对应上。。。
大体是
List<User> users = userMapper.findById(1024);
List<Book> books = bookMapper.selectMutiByUserId(users);
return presentUserWithBooks(users, books);
(最好应该加 transaction)
当然,这些代码并不是全部,首先是要写 selectMutiByUserId
这条 sql。
presentUserWithBooks
也要改,要把 user 和他的 books 对应上。。。
往快了说,我需要至少 30min。。。
如果是 RoR,2min 搞定,测都不用测。
user = User.includes(:books).find(1024)
return present_user_with_books(user)
我主要是针对这句话
感觉像讲故事,最近用 spring boot 做了一个小项目,在 idea 强大的智能完成加持下,感觉也不比 rails 效率低多少,但静态语言带来的安全感让写代码的心智负担降低很多
举的例子,也是开发中比较常见的,也是想说明,RoR web/API 开发这个场景下,开发效率会高很多。
技术栈对软件开发进度的影响,这个是另一个问题。这个问题本身想说明白就很难。比如,反复修改花费的时间这块要不要算,这个大家就有不同的理解。
单单
RoR web/API 开发这个场景下,开发效率比 Java Spring 高很多
这个观点想说明白已经很难了。。。就算是有了具体例子。。。
所以,关于“技术栈对软件开发进度的影响”,我觉得我还是保持沉默比较好。
错过了。。。大佬们有没有 ppt 或者录像啥的? @xiaoronglv @luikore
跪求
恩,是的,IDE 有很多强大的功能。
额。。。麻烦先看下前后文。
我是说 IDE @Data
默认是不能提示的。。。路由也是。
RoR 没 IDE,是因为多数的时候,不需要。编辑器的自定补全,差不多就够用了。
RoR 和 IDE 的关系是,不用 IDE 大家也能很高效的写代码,但如果有更强大的补全,自然是有帮助的。
Java 和 IDE 的关系是,如果没有 IDE,几乎是写不了代码。。。至少,我只有写 java 的时候,才会去用 IDE。
RoR/Ruby + 编辑器效率多数的时候 >= Java + IDE。
项目中的模型的属性和方法
属性,用了 @Data
,IDE 可以提示吗?反正我的没提示,你要是知道话,我刚好学习下。
controller 中的方法,route 中的路径
RoR controller 之间不会相互调用,不需要知道有哪些方法。。。
路径有命令行 rake routes
打印所有路径。
java spring 如果想知道有哪些路由,是怎么搞的?这个我确实不知道,想学些下。
比起代码的健壮性,ROR 的这点简洁不值一提。
这句话,你是想说 RoR 更简洁?
跟你聊的就是 RoR 和 Java 系列的开发效率高的问题。那段代码,还真扯不出健壮性问题。。。
你想聊健壮性,可以在达成“RoR 更简洁”这个基础下,我们继续聊。
IDE 自动引入
还是要按快捷键的,如果要使用鼠标操作的话,就跟麻烦了。。。重名了,还得选。。。IDE 只不过让自动引入变的不那么麻烦罢了。
用 rails 基本上就别考虑用 IDE 了。。。
因为用不着。
这个 List<Shop> shops = dao.query(Shop.class, Cnd.orderBy().desc("shopName"), new Pager(1, 20));
需要 IDE 提示,这个 shops = Shop.page(1).per(20).order(shop_name: :DESC)
编辑器就够了。
RoR 之所以 IDE 不流行,是以为没有 IDE 大家写的也挺 happy。IDE 对 Java 来说才是必需品。
所以 IDE + JAVA 这一套更适合打工人
恩,是的,Java 创造了更多的岗位,从这个角度看,确实如此。
少了一行,一开始没看出来,不好意思。
star 还是算了吧