Java微服務云原生想法

現在越來越多人在討論云原生,也就是使用Kubernetes作為部署架構邻寿,完全抽離IASS伯复。其實Java跟云原生并不是這么搭配的搞莺,至少Spring Cloud跟Kubernetes 不合的撵溃,有很多功能重復的疚鲤。 Spring Cloud的服務發(fā)現、配置中心征懈、負載均衡石咬、網關這些都可以在Kubernetes找到替代揩悄。我在想如果完全使用Kubernetes結構來處理分布式系統(tǒng)連接卖哎、發(fā)現、配置問題删性,剩下的服務器好像只有一個Spring Boot而已亏娜,不需要引入太多組件了。
簡單構建兩個微服務蹬挺、讓后將服務發(fā)現维贺、注冊中心這些組件統(tǒng)統(tǒng)拋棄,去使用Kubernetes去實現替代效果巴帮。使用pod 探針去檢測微服務存過效果溯泣,完全是沒有任何問題的虐秋。配置中心可以通過ConfigMap的卷掛載達到類似的效果,服務間的Fegin訪問垃沦,可以不依賴服務發(fā)現進行客给,通過配置文件設定服務訪問地址,訪問地址再由Service進行維護肢簿,就可以達到屏蔽服務之間IP變化靶剑。其實很多人都很不屑為了這一點點性能,破壞整個完整Spring Cloud體系池充,但是我想的是桩引,要Java往云原生發(fā)展,必須慢慢進行改變才行的收夸,至少現在不能完全轉向坑匠,量變促進質變。在云原生時代卧惜,對每一個服務有更高需要笛辟,更小的軟件制品、更快的啟動速度序苏、更快執(zhí)行速度手幢,這些都要求在開發(fā)時盡量將每一個微服務技術依賴控制在一個可能小的范圍。我的想法能不依賴就不依賴忱详。減少微服務的技術依賴也有利于開發(fā)更容易參與進來围来,下面就可以行動吧。

項目編碼

項目依賴

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.3.RELEASE</version>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
        <finalName>${artifactId}</finalName>
    </build>

下面只展示部分代碼匈睁、feign客戶端連接另一個服務

@FeignClient(name = "author",url = "${app.author.remote}")
public interface AuthorFeign {

    @GetMapping("/author/getOne")
    AuthorDTO getOne();
}

controller調用feign接口

@RestController
@RequestMapping("book")
public class BookController {

    @Autowired
    private AuthorFeign authorFeign;

    @GetMapping("getOne")
    public Book getOne(){
        Book book = new Book();
        return book;
    }
    
    @GetMapping("getAuthor")
    public AuthorDTO getAuthor(){
        return authorFeign.getOne();
    }
}

application.yml配置文件

server:
  port: 8080
spring:
  application:
  name: book
app:
  author:
    remote: localhost:8081

編譯構建,Dockerfile 如下

FROM --platform=linux/amd64 docker.io/adoptopenjdk/openjdk8 AS java8
WORKDIR /opt/web
COPY target/book.jar .
ENV AUTHOR_URL author
ENTRYPOINT java -jar book.jar --app.author.remote}=${AUTHOR_URL} --server.port=80

進入book項目根路徑监透, 執(zhí)行命令構建鏡像

docker build . -t book:1.0v

Kubernetes 配置

Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: book-deployment
  labels:
    app: book
spec:
  replicas: 1
  selector:
    matchLabels:
      app: book
  template:
    metadata:
      labels:
        app: book
    spec:
      containers:
        - name: book
          image: book:1.0v
          env:
            - name: AUTHOR_URL
              value: "author-clusterip"

ClusterIP配置

將服務端口暴露給集群內Pod訪問

apiVersion: v1
kind: Service
metadata:
  name: book-clusterip
spec:
  type: ClusterIP
  selector:
    app: book
  ports:
    - name: http
      port: 80
      targetPort: 80

NodePort配置

將外部流量接入Pod

apiVersion: v1
kind: Service
metadata:
  name: book-nodeport
spec:
  type: NodePort
  selector:
    app: book
  ports:
    - name: book-http
      port: 80
      targetPort: 80
      nodePort: 30001

如果有興趣,去github看完整的項目cloud-demo
其實我對云原生Java應用也不是很了解航唆,想聽聽大伙意見胀蛮。
我從事Java快7年了,14年出的Java8糯钙,17年就已經開始使用Java8作為主力開發(fā)環(huán)境粪狼,想不到6年過來了,我依然還是在用Java8.其實Java的版本一直在更新任岸,從來都沒有使用過再榄。沒當市場出現新潮的技術,總想躍躍欲試享潜,學了很多東西困鸥,也忘記了很多東西??。我總是告訴自己我還能學剑按,實際上連工作快找不到了疾就,真的迷茫了澜术,不知道該往什么方向走了。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末猬腰,一起剝皮案震驚了整個濱河市瘪板,隨后出現的幾起案子,更是在濱河造成了極大的恐慌漆诽,老刑警劉巖侮攀,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異厢拭,居然都是意外死亡兰英,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門供鸠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畦贸,“玉大人,你說我怎么就攤上這事楞捂”』担” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵寨闹,是天一觀的道長胶坠。 經常有香客問我,道長繁堡,這世上最難降的妖魔是什么沈善? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮椭蹄,結果婚禮上闻牡,老公的妹妹穿的比我還像新娘。我一直安慰自己绳矩,他們只是感情好罩润,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翼馆,像睡著了一般割以。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上写妥,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天拳球,我揣著相機與錄音审姓,去河邊找鬼珍特。 笑死,一個胖子當著我的面吹牛魔吐,可吹牛的內容都是我干的扎筒。 我是一名探鬼主播莱找,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗜桌!你這毒婦竟也來了奥溺?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤骨宠,失蹤者是張志新(化名)和其女友劉穎浮定,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體层亿,經...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡桦卒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了匿又。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片方灾。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖碌更,靈堂內的尸體忽然破棺而出裕偿,到底是詐尸還是另有隱情,我是刑警寧澤痛单,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布嘿棘,位于F島的核電站,受9級特大地震影響旭绒,放射性物質發(fā)生泄漏蔫巩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一快压、第九天 我趴在偏房一處隱蔽的房頂上張望圆仔。 院中可真熱鬧,春花似錦蔫劣、人聲如沸坪郭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽歪沃。三九已至,卻和暖如春嫌松,著一層夾襖步出監(jiān)牢的瞬間沪曙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工萎羔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留液走,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像缘眶,于是被迫代替她去往敵國和親嘱根。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內容