ARTS-5-微服务的反模式和陷阱

松花皮蛋me 2019-04-14 21:31
文章首发于公众号 松花皮蛋的黑板报松花皮蛋的黑板报,作者就职于京东,在稳定性保障、敏捷开发、高级JAVA、微服务架构有深入的理解

ARTS的初衷

Algorithm: 主要是为了编程训练和学习。

Review:主要是为了学习英文

Tip:主要是为了总结和归纳在是常工作中所遇到的知识点。学习至少一个技术技巧。在工作中遇到的问题,踩过的坑,学习的点滴知识。

Share:主要是为了建立影响力,能够输出价值观。分享一篇有观点和思考的技术文章

https://www.zhihu.com/question/301150832

一、Algorithm

Spiral Matrix

Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.

Example 1:

Input:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
Output: [1,2,3,6,9,8,7,4,5]
Example 2:

Input:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
Output: [1,2,3,4,8,12,11,10,9,5,6,7]

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        if (matrix.length == 0 || matrix[0].length == 0) return res;
        int n = matrix.length;
        int m = matrix[0].length;
        int row = 0;
        int col = -1;
        while (true) {
            //向右
            for (int i = 0; i < m; ++i) res.add(matrix[row][++col]);
            //行数减少
            if (--n == 0) break;
            //向下
            for (int i = 0; i < n; ++i) res.add(matrix[++row][col]);
            //列数减少
            if (--m == 0) break;
            //向左
            for (int i = 0; i < m; ++i) res.add(matrix[row][--col]);
            //行数减少
            if (--n == 0) break;
            //向上
            for (int i = 0; i < n; ++i) res.add(matrix[--row][col]);
            //列数减少
            if (--m == 0) break;
        }
        return res;
    }

}

二、Review

microservices-antipatterns-and-pitfalls 微服务架构的一些已知的反模式和陷阱,主要包含服务粒度、数据迁移、远程访问延迟、报告、合同版本控制、服务响应等
插一个广告:微服务小白入门概述
微服务到底怎么拆分,拆分得多细好,应该从三个方面考虑,就是the service scope and functionality, the need for database transactions, and finally the level of service choreography(分析服务编排就是分析服务拆分后的调用是否过多)。服务拆分后就会面临依赖模块组件的问题,不要创建抽象类或者接口,最佳方式应该是打包成jar包,like security.jar, persistence.jar, dateutils.jar。另外服务拆分后服务间通信超时问题,不能单纯增高超时时间,最佳方式是使用熔断模式。服务间通信或者架构应该进行版本管理,保证兼容性,以免某一业务方要求修改”合同”,导致其他业务方不可用。另外服务间通信协议还是考虑是否采用REST调用或者异步请求或者广播模式等等,怎么样满足平台无关性也是一个大问题

1、服务拆分

2、数据库拆分

3、组件共享

4、事件报告(监控)

5、数据库迁移

三、Tip

iptables实现nat转换:

iptables -t nat -A PREROUTING -d “对外公网ip” -p tcp –dport “对外端口” -j DNAT –to “内部实际提供服务的ip”:”实际提供服务的端口”

iptables -t nat -A POSTROUTING -d “内部实际提供服务的ip”-p tcp –dport “实际提供服务的端口” -j SNAT –to-source “运行iptables机器的内网ip”

允许服务器的IP转发功能:echo 1 > /proc/sys/net/ipv4/ip_forward

查看规则:iptables -t nat -n -L –line-numbers

针对PREROUTING链删除规则1:iptables -t nat -D PREROUTING 1

四、Share

深度解析NIO底层


文章已于2019-06-08 00:16修改,变动:修改文章标题
阅读 171 次