Split Federated Learning Over Heterogeneous Edge Devices: Algorithm and Optimization