Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Memindahkan Perkhidmatan Mikro NestJS dengan TypeScript to Go: Seminggu Penemuan

Memindahkan Perkhidmatan Mikro NestJS dengan TypeScript to Go: Seminggu Penemuan

WBOY
WBOYasal
2024-07-17 21:01:05664semak imbas

Migrando Microservicios de NestJS con TypeScript a Go: Una Semana de Descubrimientos

Memindahkan Perkhidmatan Mikro NestJS dengan TypeScript to Go: Seminggu Penemuan

Dalam minggu lepas, saya telah melibatkan diri dalam dunia Go dengan tujuan untuk memindahkan perkhidmatan mikro kami yang dibangunkan dalam NestJS dengan TypeScript. Perjalanan ini telah menjadi latihan yang sengit dalam mengabaikan paradigma tertentu dan menerima pakai yang lain, memahami perbezaan asas antara kedua-dua ekosistem pembangunan ini.

Seni Bina Kami dalam NestJS

Dalam timbunan kami dengan NestJS, kami menguruskan perkhidmatan mikro yang disambungkan ke pangkalan data PostgreSQL dan Redis. Kami melaksanakan pelbagai strategi komunikasi antara perkhidmatan mikro:

  1. Komunikasi mengikut Acara: Kami menggunakan Pub/Sub untuk langganan dan topik yang membenarkan komunikasi tak segerak antara perkhidmatan mikro.
  2. Backend for Frontend (BFF): Kami melaksanakan REST API yang dilindungi dengan JWT, yang berfungsi sebagai perantara antara frontend dan pangkalan data.

Pengesahan dan Migrasi

Pengesahan DTO dan pemindahan data adalah penting dalam sistem kami. TypeScript telah membenarkan kami menentukan jenis dan struktur yang ketat dengan Knex dan TypeORM untuk mengendalikan migrasi. Walaupun berkesan, pendekatan ini memerlukan pemahaman mendalam tentang bahasa dan cara memanipulasi aliran data merentas perkhidmatan mikro yang berbeza.

Cabaran dengan NestJS

Kami mengesan gelung acara isu yang menjejaskan prestasi, yang kami tangani menggunakan perpustakaan Clinic.js. Kami mengenal pasti kesesakan dan mengoptimumkan penggunaan corak reka bentuk bersama-sama dengan async dan menunggu. Walau bagaimanapun, mengurus konkurensi dalam Node.js boleh menjadi rumit dan mahal dari segi sumber.

Masuk ke Go

Apabila meneroka Go, kami menghadapi peralihan paradigma dan satu siri perbezaan ketara:

  1. Penyusunan dan Penaipan Statik: Tidak seperti TypeScript, Go ialah bahasa yang disusun dengan penaipan statik yang kuat, yang memaksa kami untuk mengesan ralat pada masa penyusunan.
  2. Alir Kawalan dan Pengendalian Ralat: Go memudahkan pengendalian ralat melalui fokus eksplisitnya untuk mengembalikan ralat, bukannya pengecualian.
  3. Struktur Data dan Memori: Peruntukan memori dan pengurusan struktur data dalam Go memerlukan pemahaman yang lebih mendalam tentang perkakasan, yang berbeza daripada pendekatan JavaScript yang lebih abstrak.

OOP dan Antara Muka

Dalam Go, walaupun orientasi objek disokong, ia menunjukkan dirinya secara berbeza. Ketiadaan warisan tradisional dan penggunaan antara muka memberikan fleksibiliti tersendiri yang mesti difahami dengan teliti untuk memanfaatkan sepenuhnya.

Contoh Perbandingan

Pengesahan Data

  • NestJS: Kami menggunakan Penghias dalam DTO untuk pengesahan.

    import { IsString, IsInt } from 'class-validator';
    
    class CreateUserDto {
        @IsString()
        name: string;
    
        @IsInt()
        age: number;
    }
    
  • Go: Kami menggunakan perpustakaan seperti go-playground/validator untuk pengesahan.

    import (
        "gopkg.in/go-playground/validator.v9"
    )
    
    type User struct {
        Name string `validate:"required"`
        Age  int    `validate:"gte=0"`
    }
    
    validate := validator.New()
    user := &User{Name: "Alice", Age: 25}
    err := validate.Struct(user)
    

Komunikasi Tak Segerak

  • NestJS: Menggunakan async/menunggu untuk mengendalikan janji.

    async function fetchData(): Promise<void> {
        const data = await apiCall();
        console.log(data);
    }
    
  • Pergi: Penggunaan goroutin dan saluran untuk keselarasan.

    func fetchData() {
        dataChan := make(chan string)
        go func() {
            dataChan <- apiCall()
        }()
        data := <-dataChan
        fmt.Println(data)
    }
    

Alat dan Tetapan

Dalam Go, kami telah menggunakan alatan seperti Gin untuk REST API dan Gorm sebagai ORM. Menyediakan persekitaran kami dalam VSCode dengan membuat untuk mengautomasikan tugasan adalah penting untuk mengekalkan produktiviti dan menyesuaikan diri dengan aliran kerja baharu ini.

Fikiran Akhir

Berhijrah daripada NestJS dengan TypeScript to Go sememangnya mencabar tetapi juga memberi ganjaran. Walaupun NestJS menawarkan pengalaman yang kaya dalam pembangunan API pantas dengan tumpuan pada penggunaan semula dan pengabstrakan, Go telah memberi kami kawalan yang lebih terperinci ke atas konkurensi dan prestasi, penting untuk aplikasi yang sangat berskala.

Kami terus mencuba dan melaraskan aliran kerja kami, dan walaupun menghadapi cabaran, kami teruja dengan kemungkinan yang ditawarkan oleh Go untuk masa depan perkhidmatan mikro kami.


Saya harap blog ini menjadi panduan dan inspirasi kepada mereka yang mempertimbangkan peralihan yang sama. Apakah pengalaman yang anda alami dengan migrasi teknologi? Apakah cabaran dan penyelesaian yang telah anda temui sepanjang perjalanan?

Kongsi cerita anda dan mari kita sambung belajar bersama!

Atas ialah kandungan terperinci Memindahkan Perkhidmatan Mikro NestJS dengan TypeScript to Go: Seminggu Penemuan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn